关于MCU堆空间和栈空间,你了解多少?

cathy的头像
栈 stack 空间 堆 heap 空间
存储函数参数和局部变量,所需空间由系统自动分配,回收也由系统管理,无需人工干预 存储动态分配的内存块,分配和释放空间均由程序员控制,有可能产生内存泄漏
严格后进先出的数据结构,可用空间永远都是一块连续的区域 对空间在不断分配和释放空间的过程中,可用空间链表频繁更新,造成可用空间逐渐碎片化,每块可用空间都很小
默认大小只有几M的空间,生长方式是向下的,也就是向着内存地址减小的方向消耗空间 理论大小与几G的空间,生长方式是向上的,也就是向着内存地址增大的方向消耗空间
有计算机底层的支持,压栈和出栈都有专门的指令,效率较高 通过函数动态获取空间,涉及可用空间链表的扫描和调整以及相邻可用空间的合并等操作,效率相对较低

单片机应用中,堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈用于函数调用、中断切换时保存和恢复现场数据。

堆栈中的物体具有一个特性:第一个放入堆栈中的物体总是被最后拿出来, 这个特性通常称为先进后出 (FILO—First-In/Last-Out)。 堆栈中定义了一些操作, 两个最重要的是PUSH和POP。

PUSH(入栈)操作:堆栈指针(SP)加1,然后在堆栈的顶部加入一 个元素。POP(出栈)操作相反,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中(目的位置),然后再将堆栈指针(SP)减1。这两种操作实现了数据项的插入和删除。

“”

版权声明:本文为CSDN博主「paullucas」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/paultianke/article/details/106136539
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。