函数中的“inline __attribute__((always_inline))”是什么意思?

40

我发现了以下函数定义:

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

我想了解 inline __attribute__((always_inline)) 的含义?

2个回答

77
经常被引用的有关 gccalways_inline 文档是不完整的。 always_inline 属性使得 gcc 编译器:
  • 忽略 -fno-inline(这就是文档所说的)。
  • 忽略内联限制,因此无论如何都会将函数内联。它还会内联使用 alloca 调用的函数,而 inline 关键字永远不会这样做。
  • 如果标记为 always_inline,则不生成具有外部链接的函数的外部定义。
上述信息的来源是 gcc 源代码,因此可能会随时更改,没有警告。 一个有趣的基准测试:always_inline 性能

icc现在也适用。 - kkkobelief24

25

即使禁用了优化,它也可以迫使编译器内联函数。有关更多信息,请查看此文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接