几天前 宣布发布现代 Linker Mold 1.1 的新版本, 它可以用作 Linux 系统上 GNU 链接器的更快透明的替代品。
在这个新版本的模具 1.1 是一个版本, 包含新功能、错误修复和性能改进。
关于模具
模 支持 GNU 链接器的所有功能 并且它具有非常高的性能,因为它创建的链接的速度仅为使用 cp 实用程序简单复制文件的速度的两倍。
这样, 减少编译时间显着提高开发大型项目的便利性 通过在调试和测试更改时减少可执行文件生成过程中的等待时间。
创建 Mold 的动机是每次代码更改后必须等待链接完成的烦恼, 以及多核系统中现有链接器的低效率以及希望测试根本不同的链接架构而不诉诸不必要的复杂模型(例如增量链接)。
通过使用更快的算法、可用 CPU 内核之间的主动并行化操作以及更高效地使用数据结构,可以在 Mold 中从大量编译器准备好的目标文件中链接可执行文件的高性能。
例如: Mold实现了一种同时执行密集计算的技术 通过文件复制,主动将目标文件加载到内存中,在解析字符时使用快速哈希表, 在单独的流中扫描重定位表并删除重复部分 在不同的文件中重复。
Mold 1.1的主要创新
在展示的这个新版本的 Mold 1.1 中,强调了 支持链接阶段优化 (LTO,链接时间优化)。
LTO 优化的不同之处在于考虑了构建过程中涉及的所有文件的状态,而传统的优化模式单独优化每个文件并且不考虑调用其他文件中定义的函数的条件。
以前,当遇到 GCC 或 LLVM 中间代码 (IR) 文件时,会调用适当的 ld.bfd 或 ld.lld 链接器,但现在 Mold 自己处理 IR 文件并使用 Linker 插件 API,也用于 GNU ld 和GNU 黄金链接器。 启用 LTO 时的速度仅比其他链接器快一点,因为大部分时间都花在优化代码上,而不是链接上。
还强调了 添加的选项 “--print-dependencies”和“--print-dependencies=full” p以 CSV 格式生成有关依赖项的信息 在输入文件之间,例如,可用于在链接某些目标文件或最小化文件之间的依赖关系时分析连接原因。
从新版本中脱颖而出的另一个变化是 支持 RISC-V 架构 (RV64) 在主机和目标平台上。
除此之外,我们还可以发现 添加了“–emit-relocs”选项以启用地址重定位部分的复制 从输入文件到最终文件,以便在链接后阶段应用进一步优化。
在其他突出的变化中:
- 添加了选项“–shuffle-sections”以在将其地址固定在虚拟地址空间中之前随机化部分的顺序。
- 添加了“–warn-once”和“–warn-textrel”选项。
- 删除了对 libxxhash 的依赖。
最后 如果您有兴趣了解更多有关它的信息,您可以在中查看详细信息 以下链接。
如何安装模具?
对于那些对能够使用 Mold 感兴趣的人,他们可以通过下载和编译源代码来获得该实用程序。 为此,只需打开一个终端并键入以下内容:
git clone https://github.com/rui314/mold.git
cd mold
git checkout v1.1.1
make -j$(nproc) CXX=clang++
sudo make install
想知道Mold的使用,可以查阅文档 在此链接。