作業系統 程式執行時的記憶體組織結構

2021-06-01 01:44:35 字數 748 閱讀 2351

類似於mac os, linux,windows的作業系統會將不

同型別的資料存放到記憶體中的不同區域(段,section/segment)。

可以在執行鏈結器的時候指定各種引數來控制程式的記憶體組織,下面是windows下的典型記憶體結構。

(圖有誤,稍後修正)

1) 作業系統保留了記憶體位址最低的位置。

通常情況下,應用程式不能訪問這些位址的資料。系統保留這些空間的主要原因之一是幫助檢查空指標的引用;指標通常被初始化為null來表示指標是無效的。

2) 

棧空間:

程式用來儲存區域性變數和其他臨時資料。

3) 

堆空間:

程式用來維護動態變數。

4) 

**段:

用來儲存程式的機器指令碼。

5) 

常量區:

儲存著由編譯器產生的唯讀資料。

6) 

唯讀資料段:

儲存由使用者定義的資料,只能讀,不能寫。

7) 

靜態區:

儲存由使用者定義的已經初始化的靜態變數。

8) 

儲存段:

也稱作bss段,儲存的是使用者定義的未初始化的變數。

通常情況下,編譯器會

將**段,常量區與唯讀資料段合併

,因為這三個段區都存著唯讀資料。

參考資料書:《volumn 1:understanding the machine》(深入理解計算機,電子工業出版社)

程式執行時的記憶體

當乙個源 通過gcc編譯成a.out,執行a.out時 程式便開始了執行之旅 即程序 作業系統為程序分配堆疊空間,隨後把程式執行碼放入文字段,把程式經過初始化的全域性變數和靜態變數放入data 把程式為初始化的全域性變數和靜態變數放入bss段 並對bss段資料初始化為0 之後cpu 段指標指向mai...

程式執行時記憶體管理

1,管理執行階段記憶體空間分配 malloc new int pn new int 儲存的型別,記憶體根據此設定相應儲存位元組的記憶體 pn是記憶體位址 所以 當宣告乙個變數的指標變數時沒初始化,宣告後再來初始化則pn 接收的應該是變數在記憶體中的位址 variablename pn是儲存在記憶體的...

程式執行時的記憶體分配

一 在程式執行期間,變數儲存空間有三種 1 靜態儲存區。內存在程式編譯的時候就已經分配好了,這塊內存在程式執行期間都存在,儲存全域性變數和靜態變數。2 棧儲存區。記憶體是在程式執行期間才分配的,函式內區域性變數及函式引數的儲存單元,當 函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理...