Huge binaries: I thunk therefore I am
5 months ago
- #optimization
- #x86_64
- #linking
- 文章讨论了x86_64链接的'声音屏障'问题,特别是32位相对CALL指令可能导致重定位溢出的情况。
- 使用-mcmodel=large可以解决问题,但会导致'指令膨胀'和潜在的性能损失。
- 动态库是避免静态链接问题的常见解决方案,但会引入性能开销和部署复杂性。
- 链接时优化(LTO)提供高级优化功能,但需要大量内存且会拖慢构建速度,目前正研究ThinLTO和配置文件引导优化。
- 链接器跳板(thunks/trampolines)被提议作为解决方案,可在大二进制文件中保持快速的小代码模型,LLVM在AArch64等架构中已有先例。
- 文章探讨了为x86_64实现跳板以突破2GiB限制的可能性,建议修改GOT和PLT访问方式。
- 作者邀请合作者共同探索这些方案,强调需要在二进制大小和性能之间进行权衡取舍。