編譯時的記憶體分配

2021-04-20 02:17:10 字數 560 閱讀 6106

程式在編譯的時候占用的記憶體分為以下幾個部分:

1 、棧區( stack )— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限.

2 、堆區( heap )— 亦稱動態記憶體分配.程式在執行的時候用malloc或new申請任意大小的記憶體,程式設計師自己負責在適當的時候用free或delete釋放記憶體。動態記憶體的生存期可以由我們決定,如果我們不釋放記憶體,程式將在最後才釋放掉動態記憶體.但是,良好的程式設計習慣是:如果某動態記憶體不再使用,需要將其釋放掉,否則,我們認為發生了記憶體洩漏現象。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶.

3 、全域性區(靜態區)( static )— 全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。程式結束後由有系統釋放.

4 、常量區 — 常量字串就是放在這裡的.程式結束後由系統釋放.

5 、程式**區 — 存放函式體的二進位制**.

C C 程式編譯時記憶體分配

1 從靜態儲存區域分配 內存在程式編譯時就已經分配好,這塊內存在程式的整個執行期間都存在。速度快 不容易出錯,因為有系統會善後。例如全域性變數,static變數等。2 在棧上分配 在執行函式時,函式內區域性變數的儲存單元都在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器...

記憶體分配時對齊

下面的 載自libxml中的xmlmemmory.c ifdef sun4 define align size 16 else define align size sizeof double endif define hdr size sizeof memhdr define reserve siz...

分配記憶體時如何減少記憶體碎片

感覺面試的時候經常會被問到這個問題,然後我也學習了一下memcached的slab機制,發現很多伺服器都是使用這種機制來分配記憶體,所以決定學習一下。首先,先對記憶體分配中的夥伴系統有初步的了解 在程式設計和使用的伺服器軟體中,經常需要分配一組連續的頁框,而頻繁地申請和釋放不同大小的連續頁框,必然導...