段:每个进程所分配的虚拟内存,由很多部分组成(逻辑划分),称之为“段”
文本段:程序机器语言指令,只读,可共享
初始化数据段:显式初始化的全局变量,静态变量
未初始化数据段BSS:未进行显式初始化的全局变量,静态变量(运行时分配,运行前分配为0或NULL)
栈stack:由栈帧组成,局部变量,实参,函数返回地址&环境信息
堆heap:动态分配
下图为linux典型内存空间地址分配
栈
栈指针:指向当前栈顶
栈帧:栈以栈帧形式分配
自动变量:实参&局部变量(调用函数时自动创建,返回时自动释放栈帧)
函数调用信息:保存上层调用函数的状态(寄存器副本),以返回后能继续执行
细节:1.栈驻留的内存顺序实际实现大多由高向下增长(朝堆的方向)
2.函数返回时重置栈指针寄存器,使其指向前一帧末尾
堆
堆:一段长度可变的连续虚拟内存
动态内存分配
堆区起始位置:BSS后(&end)
当前内存边界:program break