进程内存分配图
高地址
低地址 | 段区名 | 解释 | 内容 |
stack | 栈:局部变量 | 1在函数内部定义的局部变量(非static型) 2中断发生时存放的运行环境 | |
room | 增长空间:堆向上长,栈向下长 | 堆和栈动态变化的空间,堆从低地址向上动态增长;栈从高地址向下动态增长 | |
heap | 堆:动态分配的内存空间 | 程序运行时动态分配的空间,如malloc函数、new等 动态释放,如free函数,delete等 | |
other | 其他 |
| |
.bss | 未初始化全局变量区 | 函数外部定义的如:1 int i; 2 static int g; | |
.data | 已初始化的全局变量区 | 1函数外定义的:static int i=0; 2函数内定义的:static int g;//编译器自动初始化为0 | |
.text | 可执行文件 | 1程序代码,即当前CPU的二进制机器码 2常量,如const char msg[]=”hello world\n” |
说明:
(1)对于单片机来说,可执行文件一般没必要加载至内存中,那么也就不存在.text段区
(2)对于多任务系统来说,一个进程的内存分配往往是动态的,因此堆区实际地址空间可能并不连续
(3)栈区作为存放局部变量的区域,往往可以设置其最大大小,运行时超出定义大小则会产生越界错误