内存分区模型
C++程序在执行时,将内存大方向划分为4个区域
- 代码区:存放函数体的二进制编码,由操作系统进行管理
- 全局区:存放全局变量,静态变量,常量
- 栈区:由编译器自动分配释放,存放函数的参数值,局部变量等
- 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收
不同区域存放的数据,赋予不同的生命周期,加大编程的灵活性
程序运行前
在程序编译后,生成.exe可执行文件,在执行该程序前,分为两个区域
- 代码区:
存放cpu执行的机器指令
代码区是共享的,共享的目的时对于频繁被执行的程序,只需要在内存中有一份代码即可
代码区是只读的,使其只读的原因是防止程序意外的修改它的指令 - 全局区:
存放全局变量和静态变量
存放常量区,字符常量,和其他常量
该区域的数据在程序结束后由操作系统释放
#include<iostream>
using namespace std;
//全局变量
int g_a = 10;
int g_b = 10;
//const修饰的全局变量,全局常量
const int c_g_a = 10;
const int c_g_b = 10;
int main()
{
//全局变量的地址
cout << "全局变量的地址" << (int)&g_a << " " << int(&g_b) << endl;
//普通局部变量
int a = 10, b = 10;
cout << "普通局部变量的地址" << (int)&a << " " << int(&b) << endl;
//静态变量
static int s_a = 10, s_b = 10;
cout << "静态变量的地址" << (int)&s_a << " " << int(&s_b) << endl;
//常量
//字符串常量
cout << "字符串常量的地址" << (int)&"Hello World" << endl;
//const修饰的常量(全局变量 和 局部变量)
cout << "全局常量的地址" << (int