原文
struct biig
{
int[1024 * 1024] biig = 0;
}
biig biig;
你用的是哪個版本的
dmd
?我用
2.098
(舊的
gitmaster)
編譯上面的代碼,總的可執行檔案大小隻有
900KB
.
記得大概一兩年前有一個
bug
,
dmd
會生成
1024*1024
存儲指令來初化數組,但是我剛才反彙編了一下,現在是
rep stos
,很小
LDC
是我用于釋出建構的
首選
編譯器.我使用
dmd
開發是因為周轉時間
更快
,但我也不關心使用
dmd
時的
性能/可執行檔案大小
.
LDC
很好,但請注意,兩個編譯器的目标檔案同樣大.顯然,應該歸因于尺寸減小的是
連結器
.這讓我想知道
main
函數是什麼樣子的,因為它可已經初化整個作為
死代碼
删除了.
DMD 5mb
LDC 200kb
除非絕對必要,否則你真的不應有這麼大的
結構
.
被省略的是運作時使用的
初化程式和指針位圖
是
LDC
的連結器消除了多餘的重量.可通過使用
dmd-c
自己來證明該點,然後自己連結目标檔案,提供額外的
LTO
選項來丢棄未引用的部分
/OPT:REF
/OPT:ICF