程序编译后、运行前划分
- 代码区:存放程序的二进制代码(CPU可直接执行的机器指令),特点:共享(内存只保存一份代码)、只读(防止被修改)
- 全局区:存放全局变量、静态变量、字符串常量、const修饰的全局常量,在程序结束后由操作系统释放
程序运行时划分
- 栈区:存放函数的形参、局部变量,由编译器自动进行分配和释放
- 堆区:存放使用new操作符、malloc函数等分配的内存区域,生命周期由程序员自行管理,若不对其进行释放,将在程序运行结束后由操作系统进行回收
#include <iostream>
//全局变量
int g_a = 10;
int g_b = 10;
//const修饰的全局常量
const int c_g_a = 10;
const int c_g_b = 10;
int main()
{
//局部变量
int l_a = 10;
int l_b = 10;
std::cout << "局部变量l_a的地址为 :" << int(&l_a) << std::endl;
std::cout << "局部变量l_b的地址为 :" << int(&l_b) << std::endl;
//全局变量
std::cout << "全局变量g_a的地址为 :"