程式的記憶體布局

2021-07-30 01:40:30 字數 1017 閱讀 6235

程序的記憶體布局

1.**段

存放程式的可執行**。

2.唯讀資料段(ro data)

存放不需要被更改的資料

3.已初始化讀寫資料段(rw data)

存放在程式中宣告的,並且具有初始值的變數。程式執行時應位於可讀寫的區域,並具有初始值,以供程式執行時讀寫。

4.未初始化資料段(bss)

未初始化資料實在程式中宣告,但沒有初始化的變數,在程式執行之前不蓄占用記憶體。

5.堆

只在程式執行時出現,一般由程式設計師分配和釋放。在具有作業系統的情況下,如果程式沒有釋放,作業系統可能在程式結束後**記憶體。

6.棧

棧記憶體只在程式執行時出現,在函式內部使用的變數、函式的引數以及返回值將使用棧空間,棧空間由編譯器自動分配和釋放。

小結:

在程式連線後,會生成程式的靜態映像。包括**段,唯讀資料段,讀寫資料段。

在程式執行後,記憶體中增加未初始化資料段,堆,棧。

在c++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。

棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,那麼在程式結束後,作業系統會自動**。

自由儲存區,就是那些由malloc等分配的記憶體塊,他和堆是十分相似的,不過它是用free來結束自己的生命的。

全域性/靜態儲存區,全域性變數和靜態變數被分配到同一塊記憶體中,在以前的c語言中,全域性變數又分為初始化的和未初始化的,在c++裡面沒有這個區分了,他們共同占用同一塊記憶體區。

常量儲存區,這是一塊比較特殊的儲存區,他們裡面存放的是常量,不允許修改。

程式的記憶體布局

專題五 記憶體管理的藝術。包括以下章節 各個段的作用 堆疊段在程式執行後才正式存在,是程式執行的基礎.bss段存放的是未初始化的全域性變數和靜態變數.text段存放的是程式中的可執行 data段儲存的是那些已經初始化了的全域性變數和靜態變數.rodata段存放程式中的常量值,如字串常量竊以為 區域性...

程式的記憶體布局

在可執行程式中的對應關係 注意 沒有堆疊段 檔案布局在記憶體中對映 有堆疊段 各個段的作用 1.堆疊段在程式執行後才正式存在,是程式執行的基礎 注意 所以堆疊段在程式檔案的布局中沒有,在記憶體布局中有 2 bss段存放的是未初始化的全域性變數和靜態變數 3 text段存放的是程式中執行 4 data...

c 程式的記憶體布局

對任何乙個普通c 程式來講,它都會涉及到 5種不同的資料段。常用的幾個資料段種包含有 程式 段 程式資料段 程式堆疊段 等。不錯,這幾種資料段都在其中,但除了以上幾種資料段之外,程序還另外包含兩種資料段。下面我們來簡單歸納一下程序對應的記憶體空間中所包含的 5種不同的資料區。段 段是用來存放可執行檔...