gpt4 book ai didi

performance - gcc 链接顺序会影响程序执行的速度吗

转载 作者:行者123 更新时间:2023-12-04 02:54:17 26 4
gpt4 key购买 nike

我知道 gcc 中的链接顺序对于正确确定符号很重要;但
现在我在生成的可执行文件上看到一个奇怪的速度问题。我将对象和文件链接为

g++ -m32 a.o b.o ar1.a ar2.a -lm -lpthread -lcrypt -lz -pthread -o afast.out

对比

g++ -m32 a.o ar1.a b.o ar2.a -lm -lpthread -lcrypt -lz -pthread -o aslow.out

第二个版本运行速度慢 2 倍。 b.o 实际上在 ar1.a 文件中,但 ar2.o 引用了它,因此链接器提示,因此我不得不将 b.o.一开始,我将 b.o 一直放在链接的末尾以形成正确的依赖顺序,但后来发现它甚至在开始时就可以工作,甚至更快。

有没有人经历过这个?目标文件链接顺序与归档顺序不同吗?怎么会有速度影响?

使用 gcc3.4.6 或 gcc4.1.2 获得类似的结果

最佳答案

根据目标代码在内存中的布局方式,执行速度可能存在显着差异。通常,您希望热函数靠近在一起,这样它们就不会与冷函数混淆,因此您的 IcacheTLB不受冷函数的污染。但是,您受此影响的可能性很小。

最有可能的是,您有一些符号在“快速”可执行文件中以一种方式解析,而在“慢”可执行文件中以另一种方式解析。命令行中归档库和目标文件的顺序matters ,您最终可以从 ar1.a 中拉出一些对象在“快速”链接中,而您将从 ar2.a 拉出等效对象在“慢”链接中。或许 ar2.a 中有一些未优化的代码?

运行 nm -A ar1.a ar2.a检查两者中是否有任何符号是第一步。然后,您可以要求链接器生成链接映射(使用 -Wl,-M,map.out )并检查这些符号在两个链接中的实际来源。

关于performance - gcc 链接顺序会影响程序执行的速度吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com