原文
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选项来丢弃未引用的部分
加上如下,dmd变小了:
/OPT:REF
/OPT:ICF
只有1M.
/OPT:REF删除死码,/OPT:ICF,折叠相同COMDAT.调试时,就不要加上这两个选项.
/Gy允许函数级链接.










