stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】

本文探讨了在STM32单片机中堆和栈的分布和管理。通过编译示例代码,展示了栈使用了1600多字节的RAM。堆栈在启动文件中被预先定义,栈向低地址扩展,堆向高地址扩展。堆栈溢出是需要关注的问题,而堆和栈的大小在startup_stm32f2xx.s中定义。堆用于全局变量和malloc分配,栈则存放局部变量。理解堆栈对于有效利用单片机资源至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。

 

那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘:

 

 

刚接手STM32时,你只编写一个

int main()

{

while(1);

}

BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-data=1632 

编译后,就会发现这么个程序已用了1600多的RAM,要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了,

分析map,你会发现是堆和栈占用的,在startup_stm32f10x_md.s文件中,它的前面几行就有以上定义,

这下该明白了吧。

 

Stack_Size   EQU   0x00000400

Heap_Size   EQU   0x00000200

 

以下引用网上资料 理解堆和栈的区别

(1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似

于数据结构中的栈。

(2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配

方式类似于数据结构中的链表。

(3)全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态

变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系

统自动释放。

(4)文字常量区:常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值