C的内存分为四个区域
程序在内存中的执行过程
1)操作系统把物理代码加载到内存中
2)操作系统把C代码分为四个区
3)操作系统找到main函数的入口执行
C内存模型具体的分区
-
堆(heap)
程序员手工分配,c中对应的malloc(分配堆中内存)free(释放堆中内存)。C++中主要是new,delete分配释放堆中的内存,如果不释放就可能造成内存泄漏(memory leak)。
(malloc-free new-delete new[]-delete[]) -
栈(stack)
由编译器自动分配,主要存放局部变量,函数参数。函数结束,数据也就自动释放。 -
全局/静态存储区
全局变量和静态变量存在在一起。
初始化的全局变量和静态变量在一块区域。(bbs段)
未初始化的全局变量和静态变量在相邻的另一快区域(data数据段)
程序结束后由系统释放。 -
代码区
存放函数体的二进制代码
C++的内存分为五个区域
C++与C的内存分部主要由两个不同
1.比C多了一共常量存储区
五,常量存储区
存放常量,不允许修改
2.静态存储区
不区分bbs和data