【发布时间】:2010-12-31 21:24:57
【问题描述】:
在某些情况下,是否有任何令人信服的性能理由来选择静态链接而不是动态链接,反之亦然?我听过或读过以下内容,但我对这个主题的了解还不够,无法保证其真实性。
1) 静态链接和动态链接在运行时性能上的差异通常可以忽略不计。
2) (1) 如果使用使用配置文件数据来优化程序热路径的分析编译器则不成立,因为通过静态链接,编译器可以同时优化您的代码和库代码。使用动态链接只能优化您的代码。如果大部分时间都花在运行库代码上,这会产生很大的不同。否则,(1) 仍然适用。
【问题讨论】:
-
"使用静态链接,编译器可以优化 .. 库代码",但前提是它也可以编译!如果你只是链接到预编译的目标文件,你的编译器就没有机会优化它们。
-
如果这是真的,那么您是对的,但是对于现代编译器的真实性存在一些疑问,如果有人可以以一种或另一种方式验证这一点,那就太好了。跨度>
-
使用编译为本机代码的编译器(像大多数 C/C++ 编译器一样)没有进一步优化代码的机会。如果代码被编译为某种中间语言(如 .Net IL),则在加载库时调用 JIT 编译器以将其编译为本机代码。随着 JIT 编译器的发展,最终编译会随着时间的推移变得越来越好。
-
@Eloff:VS2008 在启用 LTCG 的情况下完全可以做到这一点。 (不过,lib 文件变得很大。。)我玩弄了它,对于对“我的编译器能为我做什么”感兴趣的人来说,这简直是惊人的。
标签: c++ c performance static-linking dynamic-linking