.bss.data.textint a=0, b=0; int arr[5]={1,2,3,4,5};
printf("&a=%p &b=%p arr=%p", &a, &b, arr);
// 輸出:
// &a=0x7fff5fbff944
// &b=0x7fff5fbff940
// arr=0x7fff5fbff920
// 先宣告的 a 位址較高,後宣告的 b、arr 位址較低 → 堆疊向下增長
for (int i=0;i<5;i++) printf("&arr[%d]=%p", i, &arr[i]);
// &arr[0]=0x7fff5fbff920
// &arr[1]=0x7fff5fbff924
// ... 每項 +4 bytes(int),位址遞增
觀察 &arr[4]=0x7fff5fbff930、&b=0x7fff5fbff940,中間相差 16 bytes(4 個 int)。原因:編譯器以**單次配置單位 = 最大區域變數大小**(此例 arr[5] = 20B),先配 20B 給 a,b(共 8B),剩 12B 不足放 arr,再配一塊 20B 給 arr,產生 12B 間隙。
