关于堆和栈已经是程序员的一个月经话题,大部分有是基于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):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配
方式类似于数据结构中的链表。
(