C++ C+中哪个更快+;:完全编译,还是链接到共享或静态库?

C++ C+中哪个更快+;:完全编译,还是链接到共享或静态库?,c++,compilation,shared-libraries,static-libraries,C++,Compilation,Shared Libraries,Static Libraries,论坛上有几个关于共享库与静态库性能的讨论。但是这些方法与编译代码相比如何呢 在我的例子中,我有一个类(求值代码),它包含几个方法,这些方法包含几个for循环,并且会被另一个类(求值代码)的方法调用多次。我还没有完成所有的实现和测试。但是,出于性能考虑,我想知道是应该全部编译所有文件(编译器优化优势?),还是单独编译一些文件以生成静态或共享库。这些方法将取决于您的编译器和选项: 不使用库: 一个好的编译器和构建系统将缓存结果,这应该和其他两个一样快。在实践中,许多代码库的划分不够理想,导致编译速度

论坛上有几个关于共享库与静态库性能的讨论。但是这些方法与编译代码相比如何呢


在我的例子中,我有一个类(求值代码),它包含几个方法,这些方法包含几个
for
循环,并且会被另一个类(求值代码)的方法调用多次。我还没有完成所有的实现和测试。但是,出于性能考虑,我想知道是应该全部编译所有文件(编译器优化优势?),还是单独编译一些文件以生成静态或共享库。

这些方法将取决于您的编译器和选项:

不使用库: 一个好的编译器和构建系统将缓存结果,这应该和其他两个一样快。在实践中,许多代码库的划分不够理想,导致编译速度慢,经典的方法是将代码库分解成库

静态: 这可能比动态链接慢,因为有机会运行链接时间优化(LTO),这可能需要一段时间

动态: 由于动态加载的具体实现方式,当您有少量函数时,可能会比较慢


总而言之,除非你正在从事某个怪物项目,担心人们会对构建系统造成麻烦,否则请将其全部放在一个项目中,避免不必要的复杂调试。

我明白了。。。但是,在所有条件相同的情况下(操作系统和编译器),这三种方法在性能方面的比较有什么一般性的说法吗?如果不需要编译,编译时间显然会更快。运行时根本不应该依赖于动态/静态/编译,除非存在一些无法事先预测的微妙的缓存效果。为什么不试试看呢?这样,您就可以得到特定于特定设置的答案。