【C++】C与C++、C++内存空间、堆与栈

C与C++的区别与联系
C++内存空间
int global_var; // 未初始化全局变量,BSS段
const char* str = "Hello"; // 字符串常量text段 in数据段
void func() {
static int static_var; // 未初始化的静态变量,数据段
int local_var; // 局部变量, 栈
int* ptr = new int; // 动态分配内存,堆
}
堆和栈的区别与联系
特性 | 栈 | 堆 |
内存管理方式 | 编译器自动管理 | 程序员手动控制 |
生命周期 | 函数作用域 | 显示释放或由智能指针管理 |
分配效率 | 极快(寄存器操作) | 较慢(系统调用+复杂管理) |
空间利用率 | 高(连续紧凑) | 低(可能存在碎片) |
最大尺寸 | 有限(MB级) | 受虚拟内存限制 |
访问方式 | 直接访问(LIFO) | 随机访问(通过指针) |
线程安全 | 每个线程独立栈 | 进程内全局共享 |
增长方向 | 高地址向低地址方向增长 | 低地址向高地址方向增长 |
适用场景 | 小对象、确定生命周期的临时对象 高频创建/销毁的实例 | 大内存块需求(大型数组) 多态对象(基类指针操作) 需要跨函数保持状态的对象 |