如果我不将函数 f 声明为内联。如下:
A.h:
X f(Y y);
A.cpp:
X f(Y y)
{
...
}
然后在不同的翻译单元中:
B.cpp:
#include "A.h"
Z g(W w)
{
...
... f(...) ...
...
}
然后我用 gcc 4.6 编译两个翻译单元 A.o 和 B.o,然后也通过 gcc 链接它们。 (也许两个步骤都加上 -O3)
gcc 会考虑在链接时内联函数以提高性能吗?还是太晚了?
在代码审查中,有人建议我不应该将我的函数声明为内联,因为编译器比我更清楚何时内联。我总是有这样的印象,除非该函数是在标头中定义的,否则编译器没有内联它的选项。
(如果 C 模式、C++ 模式或 gnu++0x 模式的答案不同,也请指出)
该功能称为链接时间优化(LTO)在 GCC 4.6 中默认不启用
[编辑]
启用 LTO 后,GCC 将保存以下内容的“GIMPLE”表示:X f(Y y)
in A.obj
。这种表示比通常的 C++ 预处理稍微多一些,但也不是很多。特别是,它还没有翻译成汇编。因此,链接器仍然可以内联它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)