进程内存分配图
|
高地址
低地址 |
段区名 |
解释 |
内容 |
|
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)栈区作为存放局部变量的区域,往往可以设置其最大大小,运行时超出定义大小则会产生越界错误
本文详细解析了进程内存的布局情况,包括栈、堆、.bss、.data、.text等段区的功能与用途,特别关注了栈和堆在程序运行过程中的动态变化及其重要性。
9137

被折叠的 条评论
为什么被折叠?



