C++允许您使用inline
关键字注释函数。据我所知,这提供了一个提示(但没有义务)给编译器来内联函数,从而避免了小函数调用的开销。在使用-O3编译时将函数标记为内联?
我有一些经常调用的方法,他们确实应该内联。但是inline
-annotated函数需要在头文件中实现,所以这会使得代码的安排得不太好。此外,我认为内联是一种编译器优化,应该对程序员透明地进行,因为它是有意义的。
那么,我是否必须用inline
来注释我的函数是否发生了内联,或者当我用-O3
或其他适当的优化标志进行编译时,GCC会如何计算出没有注释的?
“*内联注释函数需要在头文件中实现*” - 这不是一个真实的陈述。 –
链接时优化可以不在标题中内联函数。 “inline”的主要含义是“this * can * in the header”,但不是* must *。 –
http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Inline.html尤其要注意的是(1)gcc只在内联时优化(使用-O标志)或使用* __属性__((always_inline ))*(2)有时由于技术原因无法内联(使用-Winline在发生这种情况时发出警告)(3)gcc可能决定内联未标记为内联的函数(使用-fno关闭此功能-default内联)。基本上,当你使用-O标志时,它将内联所有的内联函数,除非它不可能这样做。它可能内联没有标记为内联的其他功能。 – thang