【问题标题】:what “inline __attribute__((always_inline))” means in the function?函数中的“inline __attribute__((always_inline))”是什么意思?
【发布时间】:2021-03-05 07:26:55
【问题描述】:

我找到了以下函数定义:

static inline __attribute__((always_inline)) int fn(const char *s)
{
  return (!s || (*s == '\0'));
}

而我想知道inline __attribute__((always_inline))的含义?

【问题讨论】:

    标签: c gcc


    【解决方案1】:

    always_inline 的经常引用的 gcc 文档不完整。

    always_inline 属性使gcc 编译器:

    • 忽略-fno-inline(这是文档中所说的)。
    • 忽略内联限制,因此无论如何都内联函数。它还内联了带有 alloca 调用的函数,而 inline 关键字永远不会这样做。
    • 如果标有always_inline,则不会生成具有外部链接的函数的外部定义。

    以上信息来源为 gcc 源代码,如有更改,恕不另行通知。

    一个有趣的基准:always_inline performance

    【讨论】:

    • icc 现在也申请
    【解决方案2】:

    即使优化被禁用,它也会强制编译器内联函数。更多信息请查看this documentation

    【讨论】:

      猜你喜欢
      • 2012-07-31
      • 1970-01-01
      • 2021-12-19
      • 2015-05-30
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      相关资源
      最近更新 更多