1.内存分区模型
C++在程序执行之前,将内存大致分为4个区域:
- 代码区:存放的是函数体的二进制代码,由操作系统进行管理
- 全局区:存放的是全局变量、静态变量和常量
- 栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放
- 堆区:开发者自行分配和释放,若开发者不释放,程序结束时由操作系统进行回收
其中还有更为详细的分类:
1、静态存储区:全局区、
2、动态存储区:栈、堆、
3、代码区:位于最底层,存放函数体二进制代码
在程序编译后,生成了exe可执行程序,exe执行前该程序分为两个区域:
代码区和全局区(静态存储区)
函数体代码示例:
#include <iostream>
using namespace std;
const int c_varity;//const修饰的全局变量,存放在全局区
static int s_varity;//静态全局变量,同样存放在全局区
int varity;//全局变量,存放在全局区中,整个程序运行期间都存在
class Person{
Person(int* p){
p = new(int);//堆区,由开发者进行开辟空间
}
~Person(){
delete p;//堆区,由开发者进行释放
}
//函数体,二进制代码存放在代码区中,由操作系统进行管理
void function(int a,int b,int c){//参数列表存放在栈中,由编译器自动分配和释放
Person p(&varity);
int a = 0;//局部变量,存放在栈区
const int f_c_varity;//const修饰的局部变量,存放在栈区
cout<<"函数function执行!"<<endl;//“”内的字符串存放在常量区
}
int main(){
function();
return 0;
}