程式的記憶體結構

2021-10-09 10:26:01 字數 533 閱讀 3525

在程式執行前:

bss段(未初始化資料區):用於存放程式中未初始化的全域性變數和靜態變數,程式結束後由資源有系統自動釋放(bss段並不存放在程式檔案中,因為核心在程式執行前將他們設定為0,存放在程式檔案中的只有**段和已初始化資料區)

data(已初始化資料區): 用於存放已初始化的全域性變數和靜態變數.

text(**段)存放**和唯讀的常量

程式執行時:

棧區:棧中存放函式引數和區域性變數,由編譯器自動釋放,每當乙個函式被呼叫時,函式的返回值和呼叫資訊被儲存到棧中,然後被呼叫的函式會在棧上為它的自動變數和臨時變數建立空間,每當呼叫乙個函式是,就有乙個新的棧被建立,棧空間從高位址向低位址增長,棧空間超過界限會溢位.

堆區:用於動態記憶體分配,從低位址向高位址增長,採用的是鏈式的儲存方式,因為頻繁的malloc/free造成的空間不連續,產生碎片,所以在申請堆記憶體是會 採用相應的搜尋演算法,搜尋當前足夠的空間,所以效率不高

C 程式的記憶體結構

問題引出 在看一些資料部落格的時候說執行緒共享同乙個程序的 段和資料段,又有說法是 段和資料段在可執行檔案中載入,比較疑惑,下面稍微具體的整理一下。int a 0 全域性初始化區 char p1 全域性未初始化區 main int b 棧 char s abc 棧 char p2 棧 char p3...

C 程式的記憶體結構

問題引出 在看一些資料部落格的時候說執行緒共享同乙個程序的 段和資料段,又有說法是 段和資料段在可執行檔案中載入,比較疑惑,下面稍微具體的整理一下。int a 0 全域性初始化區 char p1 全域性未初始化區 main int b 棧 char s abc 棧 char p2 棧 char p3...

C程式記憶體結構

c程式記憶體結構 乙個32位的執行在保護模式下應用程式 無論是linux 還是windows 都給它分配乙個4gb的平坦的記憶體空間 乙個執行著的c程式所占用的記憶體空間分為 區 初始化資料區 未初始化資料區 堆區 和 棧區 在位址上從高位到地位為 高位 棧區堆區 未初始化資料區 即bbs 資料區 ...