程式的記憶體布局

2021-08-02 19:13:35 字數 948 閱讀 8025

專題五:記憶體管理的藝術。包括以下章節:

各個段的作用

堆疊段在程式執行後才正式存在,是程式執行的基礎.bss段存放的是未初始化的全域性變數和靜態變數.text段存放的是程式中的可執行**.data段儲存的是那些已經初始化了的全域性變數和靜態變數.rodata段存放程式中的常量值,如字串常量竊以為:區域性變數在可執行檔案中(程式還沒有執行,是乙個可執行的二進位制檔案)時,是在.text段中。只有在執行時(程式已經載入到記憶體中),且呼叫了該區域性變數所在的函式時,才從.text段中對映到記憶體中的棧空間;而沒有呼叫函式時,區域性變數仍在記憶體的.text(**段)段空間。

靜態儲存區通常指程式中的.bss和.data段唯讀區通常指程式中的.rodata段區域性變數所佔空間為棧上空間動態空間為堆中的空間程式可執行**存放於.text段同是全部變數和靜態變數,為什麼初始化的和未初始化的儲存在不同段中?

-c規定,未初始化變數的初值為0,這個清0的操作是由啟動**完成的,還有已初始化變數的初值的設定,也是由啟動**完成的。

-為了啟動**的簡單化,編譯鏈結器會把已初始化的變數放在同乙個段:.data,這個段的映像(包含了各個變數的初值)儲存在「唯讀資料段」,這樣啟動**就可以簡單地複製這個映像到 .data 段,所有的已初始化變數就都初始化了。

-而未初始化變數也放在同乙個段:.bss,啟動**簡單地呼叫 memset 就可以把所有未初始化變數都清0。

程式的記憶體布局

程序的記憶體布局 1.段 存放程式的可執行 2.唯讀資料段 ro data 存放不需要被更改的資料 3.已初始化讀寫資料段 rw data 存放在程式中宣告的,並且具有初始值的變數。程式執行時應位於可讀寫的區域,並具有初始值,以供程式執行時讀寫。4.未初始化資料段 bss 未初始化資料實在程式中宣告...

程式的記憶體布局

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

c 程式的記憶體布局

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