| 段名 | 別名 | 內容 | 權限 | 生命週期 |
|---|---|---|---|---|
| .text | 代碼區 | 函數二進制指令 | RX | 進程存續 |
| .rodata | 常量區 | 字符串字面量、const 全局變量 | R | 進程存續 |
| .data / .rwdata | 全局初始化區 | 已初始化全局/靜態變量 | RW | 進程存續 |
| .bss | 全局未初始化區 | 未初始化全局/靜態變量(自動清零) | RW | 進程存續 |
| heap | 堆區 | malloc/new 動態分配 | RW | 手動管理 |
| stack | 棧區 | 局部變量、參數、返回地址 | RW | 函數調用期 |
[cpp]
int a = 0; // .data
char *p1; // .bss
int main() {
int b; // stack
char s[] = "abc"; // "abc"在.rodata,s在stack
char *p2; // stack
char *p3 = "123456"; // "123456"在.rodata,p3在stack
static int c = 0; // .data
p1 = malloc(10); // heap
p2 = malloc(20); // heap
strcpy(p1, "123456");// "123456"在.rodata,編譯器可能合併
}
static 全局:僅本文件可見,降低耦合。static 局部:靜態存儲,生命周期延長至進程結束,僅初始化一次。static 函數:內部函數,僅本文件可見。無論堆棧,均需防止緩衝區溢出;使用 strncpy、snprintf、邊界檢查等安全函數。