靜態變量(static)在程序加載階段(運行前)完成初始化賦值,屬於靜態存儲期,編譯期確定初值,存放在 .data/.bss 段。
// test_static.c #includeint main() { static int i; // 未顯式初始化 → 默認 0,放 .bss static int j = 0x12345678; // 顯式初始化 → 放 .data printf("i=%08X, j=%08X\n", i, j); return 0; }
gcc -c test_static.c -o test_static.o
objdump -t test_static.o

圖 符號表顯示 i 在 .bss,j 在 .data
objdump -j .data -s test_static.o

圖 .data 段中可見 0x78 0x56 0x34 0x12 (小端存儲 0x12345678)
| 變量類型 | 存儲段 | 初始化時機 | 默認值 |
|---|---|---|---|
| static 全局/局部(已初始化) | .data | 程序加載時從映像複製 | 指定值 |
| static 全局/局部(未初始化) | .bss | 加載時內核清零 | 0 |
| const static(僅讀) | .rodata | 加載時映射 | 指定值 |