首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 內存分配五大區域詳解:堆、棧、自由存儲區、全局/靜態區、常量區

     編輯:關於C++

五大區域劃分

區域分配方式生命周期管理典型內容
棧編譯器自動作用域結束自動銷毀局部變量、函數參數、返回地址
堆new程序員 delete,進程結束 OS 回收動態對象
自由存儲區malloc/realloc程序員 freeC 風格動態內存
全局/靜態區編譯期/鏈接期進程結束釋放全局變量、靜態變量(C++ 無初始化/未初始化之分)
常量區編譯期只讀,進程結束釋放字面量、const 全局/靜態對象

堆 vs 棧:核心差異

維度堆棧
管理手動自動
空間~4GB (32位)默認 1MB (VC6),可調
碎片頻繁分配釋放產生先進後出,無碎片
增長方向不定向低地址
分配方式鏈表/樹管理空閒塊指針遞減
效率較慢(系統調用、鎖)極快(指針移動)

代碼示例

void f() { int* p = new int[5]; }

p 在棧(4 字節),指向的 int[5] 在堆(20 字節)。釋放需 delete[] p。

VC6 棧大小設置

Project → Settings → Link → Output → Reserve/Commit 設置堆/棧保留與提交大小。

總結

  • 棧快但小,適合小、短命對象;堆大但慢,適合大、長命、動態大小對象。
  • 嵌入式/實時系統傾向避免堆,用靜態/棧/內存池。
  • C++ 統一平坦地址空間(32 位線性地址),無段:偏移模式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved