天天看點

C語言程式的記憶體空間布局

c語言程式是編譯後的二進制程式,其對目标作業系統依賴性非常強,如:linux程式無法在windows系統上直接運作,反之亦然,再如:64位程式無法允許在32位系統。對于c語言程式的記憶體存儲空間的布局,還是需要了解一下的。

正文段:cpu執行機器指令的部分,該段是隻讀的。

初始化資料段:簡稱資料段,已初始化的變量(全局,靜态局部變量)。

非初始化資料段:簡稱bss段,這段在二進制可執行檔案中不存在,未初始化的(全局,靜态變量)。

棧:局部變量,函數調用所儲存的資訊(如寄存器值)等都儲存在棧中。

堆:動态配置設定的記憶體,如用malloc,realloc等申請的記憶體,使用後必須手動釋放。

說明:

局部變量是在運作時建立的,他們并不進入a.out 資料段儲存在目标檔案中 bss段不儲存在目标檔案中(除了記錄bss段在運作至所需要的大小) 文本段最容易受優化措施影響 a.out檔案的大小受調試狀态下變異的影響,但段不受影響 nm -sx a.out指令可檢視a.out各段

繼續閱讀