0
点赞
收藏
分享

微信扫一扫

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​​选项来丢弃未引用的部分

加上如下,​​dmd​​变小了:

/OPT:REF
/OPT:ICF

只有​​1M​​​.
​​​/OPT:REF​​​删除死码,​​/OPT:ICF​​​,折叠相同​​COMDAT​​​.调试时,就不要加上这两个选项.
​​​/Gy​​​允许函数级​​链接​​.


举报

相关推荐

0 条评论