6

它们是否适用于不同的目标文件?它们是否跨不同的 DLL 工作?

我知道这取决于编译器。我很好奇是否有任何编译器和优化设置可以使这项工作。

4

1 回答 1

2

通常,是的,但原则上,使用 Link-Time-Optimization(-flto对于 GCC/Clang 编译器和链接器)或 Link-Time-Code-Generation(对于 MSVC 的编译器和链接器),编译器和链接器可以利用他们的共享知识/LTCG/GL也许是内联代码和省略副本。GCC 的手册指出:

[...] 这会导致 GCC 中的所有过程间分析和优化在这两个文件中工作,就好像它们是一个文件一样。这意味着,例如,内联器能够将 bar.o 中的函数内联到 foo.o 中的函数中,反之亦然。

请注意,这不适用于 DLL,因为共享库的代码是固定的并且已经完全编译。

RVO 只需要有关函数本身的信息(因为它就地构造函数的返回值而不是复制/移动return. 这很可能在没有 aboce 选项的情况下工作。

于 2014-05-21T08:34:54.403 回答