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) |
随机访问(通过指针) |
|
线程安全 |
每个线程独立栈 |
进程内全局共享 |
|
增长方向 |
高地址向低地址方向增长 |
低地址向高地址方向增长 |
|
适用场景 |
小对象、确定生命周期的临时对象 高频创建/销毁的实例 |
大内存块需求(大型数组) 多态对象(基类指针操作) 需要跨函数保持状态的对象 |
1422

被折叠的 条评论
为什么被折叠?



