| 段 | 內容 | 屬性 | 映像檔佔空間 |
|---|---|---|---|
.text | 程式碼、唯讀常數 | RX | 是 |
.data | 已初始化全域/靜態變數 | RW | 是 |
.bss | 未初始化或零初始化全域/靜態變數 | RW | 否(僅記錄大小) |
malloc/free 動態記憶體,向上增長.bss:零初始化靜態資料.data:已初始化靜態資料.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 耗盡。