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。