GCC 12 这次更新最大的亮点,就是给 Mold 链接器开了绿灯。Mold 是 Rui Ueyama 搞出来的,最早只是他在 LLVM 上做的研究。后来技术成熟了,Rui 就把它从实验品变成了能干活的真家伙,直接发布了正式版 Mold 1.0。这个链接器的速度快是有道理的,它不靠简单地堆硬件,主要是算法厉害。比如并行化符号解析,把以前串行的工作分到多个核上做,这样前期就能省不少时间;还有增量更新机制,只要改动过的模块重新链接就行,能省下 30% 的时间;再加上紧凑的内存布局,CPU 缓存命中率还能提高 20% 以上。公开测试显示,Mold 比 GNU Gold 快 15% 到 40%,跟 LLVM LLD 比也经常赢。 为了方便大家用,GCC 12 把 Mold 和 Gold、BDF、LLD 一起列进了配置选项里。你只要在编译命令后面加上 ```fuse-ld=mold```,就能自动调用这个新工具。哪怕是个大项目,加这一个选项就能立刻缩短 CI 的时间。不过 GCC 现在默认还是用 Gold,这主要是为了照顾现有的生态环境和工具链。社区接下来会讨论到底是以后默认用 Mold,还是一直让大家自选。 其实现在的编译器都在琢磨怎么微优化,链接器反倒成了容易被忽视的地方。Mold 用数据证明了一件事:速度快并不难,难的是既要快又要稳、还要跟以前的东西兼容。以后 GCC 升级的时候不妨试试这个选项,你会发现编译时间可能会有惊喜。