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允许函数级链接.

posted @   zjh6  阅读(18)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示