程序在内存空间上的布局如下图:
- 代码段(.text):这里存放的是CPU要执行的指令,代码是可共享的,相同的代码在内存中只有一份拷贝,同时这个段是只读的,防止程序误修改指令。
- 初始化数据段(.data):这里存放是是程序中需要明确赋初始值的变量,例如全局变量。代码段和初始化数据段都位于程序的可执行文件中,内核在调用exec函数启动该程序时,从源程序文件中读入。
- 未初始化数据段(.bss):该段中的数据为内核启动该程序前,将其初始化为 0 或 null,例如未初始化的变量。
- 堆(Heap):堆中存放的是 new 的对象,由程序员进行申请和释放
- 栈(stack):函数中的局部变量以及在函数调用过程中产生的临时变量都保存在该段中,其由程序自动进行释放。