操作系统中的内存一般分为虚拟内存和物理内存,本文主要讨论的是虚拟内存中的内存分配方式与内存存储区的内容。
APUE中的一个典型C内存空间分布图
Linux下32位环境的用户空间内存分布情况
内存分配方式
C/C++主要有以下五种内存存储区:
1)、静态区(全局数据区):存全局变量,静态变量。程序编译时内存已分配好,并存在于程序整个运行期间,程序结束后由系统统一释放
全局变量和静态变量被分配到同一块内存中。 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(data), 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(BSS,Block Started by Symbol)
2)、栈:存放函数的参数值,局部变量,函数执行结束时会被自动释放。栈内存分配运算内置于处理器的指令集中,效率高,但是容量有限。由编译器自动分配释放。
3、堆(动态内存分配):