1、栈区(stack) — 由编译器自动分配释放,存放函数的参数值,局部变量的值等。(临时变量,退出该作用域就会自动释放)
2、堆区(heap) — 程序员分配释放,若程序员不释放,程序结束时可能由OS回收。(malloc变量,通过free函数释放)
3、全局区(static) — 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
4、文字常量区 — 常量字符串就是放在这里的。程序结束后由系统释放
5、程序代码区 — 存放函数体的二进制代码。
Keil中启动引导文件定义堆和栈区的大小
Stack_Size EQU 0x00000800
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00000400
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
6、
栈:向低地址扩展
堆:向高地址扩展