堆与栈
进程内存布局
如下图所示,对于每个程序所分配的内存由很多部分组成,通常称之为“段”(segment)。
-
文本段(text)包括进程运行的程序机器语言指令。文本段具有只读属性,以防止进程通过错误指针意外修改自身指令。
-
初始化数据段(BSS)包括为未进行显式初始化的全局变量和静态变量。
对于初始化和未初始化数据段即用户初始化数据段(user-initialized data segment)和零初始化数据段(zero-initialized data segment)。
-
栈(stack)是一个动态增长和收缩的段,由栈帧(stack frames)组成。系统会为每个当前调用的函数分配一个栈帧。栈帧中存储了函数的局部变量(所谓自动变量)、实参和返回值。
-
堆(heap)是可在运行时(变量)动态进行内存分配的一块区域。堆顶端成为program break。