2025-01

mold比lld快在哪里?

有完整parallel symbol resolution,不过为此单核性能下降,且CPU总时间增大(多进程链接可能会得不偿失)。

Relocation scanning快一些,简化了错误处理,对于一个架构只支持REL和RELA中的一种。 Range extension thunks不完善。 lld对于某个架构都支持REL、RELA、CREL,有一些virtual function开销。

简化--gc-sections,保守但少处理一些功能,使用了oneTBB并行化。

Assign sections快一些。由于不支持linker script SECTIONS和一些麻烦的SHF_LINK_ORDER,可以取巧。

Finalize synthetic sections和write output快一些。使用oneTBB并行,有好的调度器均衡地分配CPU资源处理synthetic sections或写大量input sections。 而lld只能用穷人的llvm/Support/Parallel.h

大多数linker script语法不支持。Symbol representation可以简化些。

用了fork trick (unless --nofork),这可能是一种性能评测游戏。可能会让linker的parent process难以估计linker的资源消耗。

几乎所有函数都用了template <typename E>,减少了virtual function开销。但相应地,大大增加了code size。