首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 程式記憶體佈局深度解析:.text/.data/.bss 段、堆疊/堆區與 ELF 映像關係

     編輯:關於C語言

目標檔三大段

段內容屬性映像檔佔空間
.text程式碼、唯讀常數RX是
.data已初始化全域/靜態變數RW是
.bss未初始化或零初始化全域/靜態變數RW否(僅記錄大小)

執行期記憶體佈局(高位 → 低位)

  1. 堆疊:區域變數、參數、返回位址,向下增長
  2. 堆區:malloc/free 動態記憶體,向上增長
  3. .bss:零初始化靜態資料
  4. .data:已初始化靜態資料
  5. .text:程式碼、常數

關鍵區別

  • .data + .bss = 靜態區(生命週期 = 程式全程)
  • 堆區由程式員管理,堆疊由編譯器自動管理
  • .text、.data 存在映像檔;.bss 僅記錄大小,載入時由作業系統清零

實例對照

int a = 0;           // .data
char *p1;            // .bss
static int c = 0;    // .data
int b;               // 堆疊
char s[] = "abc";    // 堆疊(含字串副本)
char *p3 = "123456"; // p3 在堆疊,"123456" 在 .rodata (屬 .text 區)
p1 = malloc(10);     // 堆區
p2 = malloc(20);     // 堆區

嵌入式啟示

映像檔大小 = .text + .data;RAM 佔用 = .data + .bss + 堆疊上限 + 堆區上限。嵌入式開發須精確評估兩者,避免燒錄溢位或執行期 RAM 耗盡。

編譯鏈路圖 記憶體段分佈 程式佈局圖 ELF 區段關係
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved