堆与栈

进程内存布局

如下图所示,对于每个程序所分配的内存由很多部分组成,通常称之为“段”(segment)。

  • 文本段(text)包括进程运行的程序机器语言指令。文本段具有只读属性,以防止进程通过错误指针意外修改自身指令。

  • 初始化数据段(BSS)包括为未进行显式初始化的全局变量和静态变量。

    对于初始化和未初始化数据段即用户初始化数据段(user-initialized data segment)和零初始化数据段(zero-initialized data segment)。

  • 栈(stack)是一个动态增长和收缩的段,由栈帧(stack frames)组成。系统会为每个当前调用的函数分配一个栈帧。栈帧中存储了函数的局部变量(所谓自动变量)、实参和返回值。

  • 堆(heap)是可在运行时(变量)动态进行内存分配的一块区域。堆顶端成为program break。

阅读更多