它们是否适用于不同的目标文件? 它们是否适用于不同的DLL?
我知道这取决于编译器。我很好奇是否有任何编译器和优化设置可以使这项工作。
答案 0 :(得分:2)
通常,是的,但原则上,使用链接时优化(-flto
用于GCC / Clang编译器和链接器)或链接时代码生成(/LTCG
和{{1}对于MSVC的编译器和链接器),编译器和链接器可以利用它们的共享知识以及内联代码和elide副本。海湾合作委员会的manual州:
[...]这会导致GCC中的所有过程间分析和优化在两个文件中一起工作,就像它们是单个文件一样。这意味着,例如,内联器能够将bar.o中的函数内联到foo.o中的函数中,反之亦然。
注意这不适用于DLL,因为共享库的代码是固定的并且已经完全编译。
RVO只需要有关函数本身的信息(因为它就地构造了函数的返回值而不是复制/移动/GL
。这可能会在没有aboce选项的情况下工作。