Re: [問題] 如何縮小exe檔案的大小
→
01/20 02:01,
01/20 02:01
→
01/20 02:01,
01/20 02:01
做了一個簡單的實驗:
試著把一個 int array 放在不同的地方,並且嘗試是否給予初始值
在編譯後,以 objdump 觀察 ELF section (text, data, bss) 的大小改變
==== 程式碼 ====
#include <stdio.h>
(1)int arr[1024];
(2)int arr[1024] = {1, 2, 3, 4, 5};
int main()
{
(3)int arr[1024];
(4)int arr[1024] = {1, 2, 3, 4, 5};
}
==== 測試環境 ====
OS : Linux Ubuntu 9.04 + gcc 4.3.3
編譯參數:gcc test.c
結果觀察:objdump -x a.out
==== 測試結果 ====
text data bss 執行檔大小 (以 ls -al a.out 得到,十進位,單位 byte)
(0) 0x16C 0x08 0x08 9112 (沒有宣告任何變數,對照組)
(1) 0x16C 0x08 0x1020 9132 (未給初值的 global int[] )
(2) 0x16C 0x1020 0x08 13276 (有給初值的 global int[] )
(3) 0x17C 0x08 0x08 9112 (未給初值的 local int[] )
(4) 0x1EC 0x08 0x08 9112 (有給初值的 local int[] )
(註:local static variable 的結果與 global variable 相同)
==== 結論 ====
1. 未給初值的 global variable 會增加 bss section
2. 有給初值的 global variable 會增加 data section
3. 未給初值的 local variable 似乎不會佔用任何額外空間 (對執行檔來說)
4. 有給初值的 local variable 會增加 text section
想必是用來初始化的額外程式碼,但卻不會增加執行檔的大小
5. 如果陣列的初始值為 {0},則與 2. 相同
6. 陣列的初始值數量增減(譬如改成 {1, 2, 3, 4, 5, 6, 7} 或 {1})
會影響 local variable 的 text section 大小,但 global 則沒有影響
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.127.184.214
推
01/20 04:48, , 1F
01/20 04:48, 1F
→
01/20 04:49, , 2F
01/20 04:49, 2F
因為它真的改變了 XD 我也不知道為什麼...
※ 編輯: james732 來自: 59.127.184.214 (01/20 04:58)
※ 編輯: james732 來自: 59.127.184.214 (01/20 06:05)
→
01/20 06:53, , 3F
01/20 06:53, 3F
→
01/20 06:53, , 4F
01/20 06:53, 4F
→
01/20 06:53, , 5F
01/20 06:53, 5F
推
01/20 10:01, , 6F
01/20 10:01, 6F
推
01/20 10:06, , 7F
01/20 10:06, 7F
→
01/20 10:07, , 8F
01/20 10:07, 8F
→
01/20 10:08, , 9F
01/20 10:08, 9F
→
01/20 10:08, , 10F
01/20 10:08, 10F
推
01/20 13:28, , 11F
01/20 13:28, 11F
→
01/20 13:35, , 12F
01/20 13:35, 12F
→
01/20 13:37, , 13F
01/20 13:37, 13F
→
01/20 13:39, , 14F
01/20 13:39, 14F
推
01/20 13:46, , 15F
01/20 13:46, 15F
→
01/20 13:46, , 16F
01/20 13:46, 16F
→
01/20 13:47, , 17F
01/20 13:47, 17F
→
01/20 13:50, , 18F
01/20 13:50, 18F
→
01/20 13:51, , 19F
01/20 13:51, 19F
推
01/20 13:51, , 20F
01/20 13:51, 20F
推
01/20 13:53, , 21F
01/20 13:53, 21F
→
01/20 13:54, , 22F
01/20 13:54, 22F
推
01/20 13:58, , 23F
01/20 13:58, 23F
→
01/20 13:59, , 24F
01/20 13:59, 24F
→
01/20 13:59, , 25F
01/20 13:59, 25F
→
01/20 13:59, , 26F
01/20 13:59, 26F
推
01/20 14:37, , 27F
01/20 14:37, 27F
→
01/20 14:47, , 28F
01/20 14:47, 28F
→
01/20 14:47, , 29F
01/20 14:47, 29F
討論串 (同標題文章)