
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) | 隨機訪問(通過指針) |
線程安全 | 每個線程獨立棧 | 進程內全局共享 |
增長方向 | 高地址向低地址方向增長 | 低地址向高地址方向增長 |
適用場景 | 小對象、確定生命周期的臨時對象 高頻創建/銷毀的實例 | 大內存塊需求(大型數組) 多態對象(基類指針操作) 需要跨函數保持狀態的對象 |