34

inlineGCC 在编译 C++ 代码时是否曾尝试通过选择内联未标记关键字的函数来优化速度?

4

4 回答 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 回答