C++——内存分区

前言

C++将内存方向划分为4个区域,代码区、全局区、栈区、堆区。每个区存放的数据,都赋予不同的生命周期,给予程序员更大的灵活编程。

解释四区

  • 程序运行前

在程序编译后,生成了exe可执行程序,在未执行该程序前内存分为下面两个区域。

代码区:
1、存放CPU指行的机器指令(就是我们写的代码,只不过被翻译成立0101);
2、代码区是共享的,共享的目的是对于频繁被执行的程序,只需在内存中有一份代码即可;
3、代码区是只读的,使其只读的原因是防止程序意外修改了他的指令;

全局区:
1、全局变量和静态变量存放在此;
2、全局区还包含常量区、字符串常量、const修饰的全局变量;
3、该区域的数据在程序结束后由操作系统释放;

  • 程序运行后

程序运行后,内存又开辟了另外两个区。

栈区:
1、由编译器自动分配释放,存放函数参数、局部变量等。
2、注意:不要返回局部变量的地址,因为栈区的数据在函数执行完后自动释放。

堆区:
1、由程序员分配释放,C++中主要利用new在堆区开辟内存。
2、开辟的内存由指针进行接收,如:*p = new int(666);
3、开辟内存最好手动收回,用delete关键字。

代码区

存放函数体的二进制代码,由操作系统进行管理。

全局区

存放全局变量、静态变量、常量。

栈区

存放函数的参数值、局部变量、const修饰的局部变量,由编译器自动分配释放。

堆区

由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

int *p = new int(10);
delete p;
int *q = new int[10];//定义大小为10的数组
delete[] q;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章