1. C++内存管理核心概念解析
C++作为系统级编程语言,内存管理是其区别于其他高级语言的核心特征。理解内存分区模型是写出健壮C++程序的基础,也是面试中高频出现的考察点。现代C++程序运行时内存通常划分为四个逻辑区域:
1.1 栈区(Stack)
栈区由编译器自动分配释放,存放函数的参数值、局部变量等。其操作方式类似数据结构中的栈结构,遵循LIFO(后进先出)原则。典型特征是:
- 分配速度快(仅需移动栈指针)
- 生命周期随函数调用结束自动释放
- 默认大小有限(通常1-8MB,取决于编译器设置)
cpp复制void stackExample() {
int a = 10; // 栈区变量
char str[] = "stack"; // 栈区数组
} // 函数结束自动释放
警告:返回栈区变量的指针/引用是常见错误。当函数结束时,栈帧被销毁,相关内存不再有效。
1.2 堆区(Heap)
堆区由程序员手动管理,通过new/malloc申请,delete/free释放。其特点是:
- 分配速度较慢(需要查找合适内存块)
- 生命周期完全由程序员控制
- 空间理论上只受系统虚拟内存限制
cpp复制int* createArray(int size) {
int* arr = new int[size]; // 堆区分配
return arr; // 合法操作
}
// 调用方需手动 delete[] 释放
1.3 全局/静态存储区
存放全局变量、静态变量(包括static局部变量)。程序启动时分配,程序结束时释放。根据是否初始化分为:
- .data段:已初始化的全局/静态变量
- .bss段:未初始化的全局/静态变量(默认零初始化)
cpp复制int globalVar = 1; // .data段
static int staticVar = 2; // .data段
int uninitVar; // .bss段
void func() {
static int localStatic = 3; // .data段
}
1.4 常量存储区
存放字符串常量和其他c
