inline
GCC 在编译 C++ 代码时是否曾尝试通过选择内联未标记关键字的函数来优化速度?
问问题
13993 次
4 回答
43
是的。任何编译器只要认为这是一个好主意,就可以自由地内联任何函数。GCC 也这样做。
在-O2
优化级别,当编译器认为值得做(使用启发式)并且不会增加代码大小时,就会完成内联。每当编译器认为值得做时-O3
,它就会完成,不管它是否会增加代码的大小。此外,在所有优化级别(即启用的优化)中,仅调用一次的静态函数是内联的。
正如下面评论中所指出的,这些-Ox
实际上是包含多个更具体设置的复合设置,包括与内联相关的设置(例如-finline-functions
等),因此人们也可以根据这些更具体的设置来描述行为(并控制它)。
于 2009-10-26T17:51:51.233 回答
8
是的,特别是如果您启用了高级别的优化。
您可以向编译器提供一个标志来禁用它:-fno-inline-functions。
于 2009-10-26T17:50:34.760 回答
4
如果您使用“-finline-functions”或“-O3”,它将内联函数。您还可以使用 '-finline_limit=N' 来调整它的内联程度。
于 2009-10-26T17:52:33.790 回答
2
是的,确实如此,尽管它也会为非非函数生成非内联函数体,static
因为inline
来自其他翻译单元的调用需要这样做。
对于inline
函数,如果在任何特定的翻译单元中使用该函数,则未能提供函数体是错误的,因此这不是问题。
于 2009-10-26T17:53:12.353 回答