程序的局部變量存在於(棧)中,全局變量存在於(靜態區)中,動態申請數據存在於(堆)中。
| 區域 | 典型內容 | 管理方式 |
|---|---|---|
| 棧 | 局部變量、函數參數、返回地址、寄存器保存 | 編譯器自動分配/釋放,LIFO |
| 堆 | malloc/free/new/delete 分配的內存 | 程序員手動管理,需配對釋放 |
| 靜態區 | 全局變量、static 變量、字符串常量 | 程序啟動分配,結束釋放 |
| 代碼區 | 二進制指令 | 只讀,共享 |
| 維度 | 靜態分配 | 動態分配 |
|---|---|---|
| 時機 | 編譯期 | 運行期 |
| CPU 開銷 | 無(編譯器完成) | 有(運行時分配/釋放) |
| 空間位置 | 棧 | 堆 |
| 類型依賴 | 無需指針/引用 | 需指針或引用支持 |
| 大小確定 | 編譯前須知 | 運行時按需決定 |
| 控制權 | 編譯器 | 程序員 |
| 效率 | 高 | 較低(管理開銷) |
| 風險 | 棧溢出 | 內存洩漏、懸空指針、碎片 |