【问题标题】:Depth of inlining in GCC compilerGCC 编译器中的内联深度
【发布时间】:2012-06-25 21:19:07
【问题描述】:

我研究过

inline 说明符是对编译器应该尝试的提示 [...] 内联生成代码,而不是为 函数一次,然后通过通常的函数调用调用 机制。

问题:

  1. 如果为 GCC 编译器关闭优化,是否会忽略内联说明符?
  2. 当递归调用内联函数时,哪个编译器选项决定了“内联深度”,直到它遵循正常的函数调用机制?
  3. 如果在 for 循环中调用内联函数,是否会出现相同的“内联深度”?

【问题讨论】:

    标签: c++ optimization gcc inline-functions


    【解决方案1】:

    如果为 GCC 编译器关闭优化,是否会忽略 inline 说明符?

    是的,如果在 GCC 中关闭优化,则不会内联任何函数。相当于在编译时使用-fno-inline标志。看到这个link

    -fno-inline

    Don't pay attention to the inline keyword. Normally this option is used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.

    当递归调用内联函数时,哪个编译器选项决定了“内联深度”,直到它遵循正常的函数调用机制?

    选项max-inline-recursive-depthmax-inline-recursive-depth-auto。默认深度为 8。

    【讨论】:

      【解决方案2】:

      除了 -fno-inline 之外,您还需要使用 -fno-default-inline 来禁用类中的内联函数。 这在您使用 gdb 单步执行这些内联函数时很有用。

      【讨论】:

        猜你喜欢
        • 2019-05-11
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多