【发布时间】:2018-06-15 00:04:12
【问题描述】:
我很好奇一个可执行文件是否写得不好,它有很多死代码,在外部引用 1000 个函数(即 .so 文件),但在运行时实际上只有 100 个函数被调用,LD_BIND_NOW=1 会比LD_BIND_NOW 没有设置?因为Procedure Linkage Table会包含900个无用的函数地址?在内存占用和性能方面更糟(因为我不知道查找是否为 O(n))。
我正在尝试查看将 LD_BIND_NOW 设置为 1 是否有帮助(通过与未设置的 LD_BIND_NOW 进行比较):
1. 在延迟方面运行 24 x 5 的程序
2. 在我的情况下,节省 1 微秒被认为是很大的,因为在程序生命周期内执行的代码路径主要是处理来自 TCP/UDP/共享内存的传入消息,然后对它们进行一些计算;
所有这些代码路径都需要很短的时间(例如
LD_BIND_NOW=1 是否有助于启动时间对我来说并不重要。
【问题讨论】:
-
非常不清楚的问题。您是否关心短期运行程序的总体执行时间?哪一个?你有那个可执行文件的源代码吗?为什么你真的在乎?请编辑您的问题以进行大量改进并提供背景和动机。最后,您是否进行了基准测试(例如使用time(1)?在大多数情况下,这根本不重要!
-
@BasileStarynkevitch 我的来源有 IP,所以不能在这里发帖……而且它就像 500K 行代码,所以没有必要发帖。基准测试确实是最准确的方法;但是,我的问题是针对我的情况(刚刚添加)得到一个一般性的答案,而不是通过逐行代码得到一个非常具体的答案。希望这可以澄清一些事情。
-
参见this answer中的参考
-
你的问题确实不清楚,一脸懵逼。尝试对您的程序进行概要分析和基准测试。否则,编辑您的问题 以改进它,或许可以提供一些 minimal reproducible example。我觉得您以错误的方式使用“程序执行”。在 Linux 上,它与
execve相关。也许你的意思是在你的程序中执行一些代码(这是非常不同的) -
@BasileStarynkevitch 我替换了“执行”以避免特定于 linux 的混淆。一个具体的最小示例很难,因为我的问题是一个一般性问题,即如果程序写得不好以至于有太多死代码,LD_BIND_NOW=1 是否可以减少程序中所有可能代码路径的执行时间。我只是在寻找一个普通的案例而不是一个特定的案例。
标签: c++ c linux system centos7