天天看點

d的dmd減小檔案大小

原文

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