单片机堆和栈的理解

此文章记录自己学习的一点理解,如有错误,希望大家指出。

堆栈的共同点:

在单片机中,栈(Stack)和堆(Heap)都是内存区域,用于存储动态分配的变量和数据,栈和堆都位于RAM中。
堆栈分布

堆栈的区别:

  1. 生长方向:栈从高地址往低地址生长,堆从低地址往高地址生长。
    堆栈分布

  2. 动态内存分配:栈是先入后出(LIFO)的结构,函数调用时会将参数和局部变量的内存地址压入栈中,函数返回时再出栈。而堆是通过malloc、calloc等函数手动分配内存,程序员需要手动释放内存。
    动态分配

  3. 内存管理:栈的内存管理由编译器自动管理,当函数返回时,栈帧和栈上的变量都会被清除。而堆的内存管理需要手动管理,如果不释放会导致内存泄漏。

  4. 大小:栈的大小在编译时指定,一般较小,几百字节到几KB不等。而堆的大小可以根据需要动态调整,一般较大,几KB到几MB不等。

  5. 使用限制:栈的大小和深度受编译器和单片机硬件的限制,如果栈深度过大,容易导致栈溢出。而堆的大小受单片机内存限制,如果申请的内存过大,容易导致内存不足。

堆栈可能出现的问题:

  1. 栈溢出:栈只是侵占了堆区空间,理论上不会出现问题,破坏了堆区的数据才会出现问题。
    栈溢出
  2. 内存泄漏:程序员申请了很多空间,没有及时释放,或者内存被分割的很碎,没有一整块完整的内存可以供程序员或者系统使用了。
    内存泄漏
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值