C++内存模型演示:代码、原理与注意事项
本文通过一段带详细注释的C++代码,结合内存区域划分(栈、堆、全局/静态区、常量区、代码区),直观解释C++的内存模型。代码运行后会打印各变量的内存地址,通过地址分布可清晰区分不同内存区域,同时附带核心原理说明与关键注意事项。
一、C++内存模型演示代码
#include <iostream>
#include <cstdlib> // 用于 malloc/free
using namespace std;
// 1. 全局变量:存放在【全局/静态存储区】(程序启动时分配,结束时释放)
int global_var = 10;
// 2. 静态全局变量:同样存放在【全局/静态存储区】,仅当前文件可见
static int static_global_var = 20;
// 3. 全局常量:存放在【常量存储区】(只读,不可修改)
const int const_global_var = 30;
// 函数:存放在【代码区】(只读,存放指令)
void test_memory(int param){
// param:函数参数,存放在【栈】
// 4. 局部变量:存放在【栈】(自动分配,函数执行完自动释放)
int local_var = 40;
// 5. 静态局部变量:存放在【全局/静态存储区】(仅初始化一次,生命周期贯穿程序)
static int static_local_var = 50;
// 6. 局部常量:存放在【栈】(C++11后可能优化到常量区,但本质是局部作用域)
const int const_local_var = 60;
cout << "=== 函数内部变量(test_memory)===" << endl;
cout << "函数参数(栈): param = " << param << ", 地址 = " << ¶m << endl;
cout << "局部变量(栈): local_var = " << local_var << ", 地址 = " << &local_var << endl;
cout << << static_local_var << << &static_local_var << endl;
cout << << const_local_var << << &const_local_var << endl;
* heap_var1 = ();
* heap_var2 = []{, , };
cout << << endl;
cout << << *heap_var1 << << heap_var1 << endl;
cout << << heap_var2[] << << heap_var2 << endl;
heap_var1;
[] heap_var2;
heap_var1 = ;
heap_var2 = ;
}
{
cout << << endl;
cout << << global_var << << &global_var << endl;
cout << << static_global_var << << &static_global_var << endl;
cout << << const_global_var << << &const_global_var << endl;
();
;
}

