1.堆和栈巨细
界说巨细在startup_stm32f2xx.s
Stack_SizeEQU0x00000400
AREASTACK, NOINIT, READWRITE, ALIGN=3
Stack_MemSPACEStack_Size
__initial_sp
; Heap Configuration
;Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;
Heap_SizeEQU0x00000200
AREAHEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
2.堆和栈方位
经过MAP文件可知
HEAP0x200106f8Section512startup_stm32f2xx.o(HEAP)
STACK0x200108f8Section1024startup_stm32f2xx.o(STACK)
__heap_base0x200106f8Data0startup_stm32f2xx.o(HEAP)
__heap_limit0x200108f8Data0startup_stm32f2xx.o(HEAP)
__initial_sp0x20010cf8Data0startup_stm32f2xx.o(STACK)
明显Cortex-m3材料可知:__initial_sp是仓库指针,它便是FLASH的0x8000000地址前面4个字节(它依据仓库巨细,由编译器主动生成)
明显堆和栈是相邻的。
3.堆和栈空间分配
栈:向低地址扩展
堆:向高地址扩展
明显假如顺次界说变量
先界说的栈变量的内存地址比后界说的栈变量的内存地址要大
先界说的堆变量的内存地址比后界说的堆变量的内存地址要小
4.堆和栈变量
栈:暂时变量,退出该效果域就会主动开释
堆:malloc变量,经过free函数开释
别的:仓库溢出,编译不会提示,需求留意
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/256015.html