注意,上述只描述的是可執行檔案具有三個段,而不是由該三個段構成。
在 linux 下,我們可以通過size
命令輸出可執行檔案的段資訊。
##記憶體布局
存放程式指令和字串常量我們知道,可執行檔案的文字段包含程式的指令,鏈結器把指令直接從可執行檔案拷貝到記憶體中,形成文字段。
存放已初始化的全域性變數和static
變數
可執行檔案的資料段包含經過初始化的全域性和靜態變數以及它們的值,形成資料段。
存放未初始化的全域性變數和static
變數
包含資料段和 bss 段的整個區段,在載入記憶體後通常被稱為資料區。這是因為在作業系統的記憶體管理術語中,段就是一片連續的虛擬位址,所以相鄰的段被接合。一般情況下,在任何程序中,資料段是最大的段。
由程式設計師分配和釋放的記憶體空間堆記憶體只在程式執行時出現,往高位址增長。
存放自動變數;過程活動記錄;暫時儲存區棧記憶體只在程式執行時出現,往低位址增長。
c 記憶體布局
寫好了 只是第一步,接下來還需要編譯生成對應的二進位制才能使用 預處理,編譯,彙編,鏈結 那麼在執行的時候,和資料在記憶體中都是怎麼分布的呢?c的記憶體布局是怎樣的呢?c 的記憶體布局是怎樣的呢?有一點值得注意,c語言和c 的記憶體布局是不一樣的,這也就是平日裡搜尋c 記憶體布局的文章內容總是很相似...
C語言記憶體布局
重點關注以下內容 c語言程式在記憶體中各個段的組成 c語言程式連線過程中的特性和常見錯誤 c語言程式的執行方式 一 c語言程式的儲存區域 由c語言 文字檔案 形成可執行程式 二進位制檔案 需要經過編譯 彙編 連線三個階段。編譯過程把c語言文字檔案生成匯程式設計序,彙編過程把匯程式設計序形成二進位制機...
C 物件記憶體布局
好文要記下來 上 下 玄機逸士系列 補充一點,兩個博文裡面都沒有給出虛基類表中的第一項的解釋,其實第一項就是vbptr到自己類物件位址的偏移量。若沒有虛函式,也就是沒有vfptr,偏移量為0,若有,就為 4 vfptr 在 vbptr之前,所以是 4 玄機逸士的結論 vc 6 其一,只要涉及到虛基類...