__always_inline和inline之间的区别

时间:2014-01-08 12:11:58

标签: c compiler-construction inline

another question

上使用inline指令有一个很好的解释

如果在头文件上使用inline__always_inline有任何区别,有人可以解释一下吗?

而且,当我希望__always_inline超过inline或反之亦然?

3 个答案:

答案 0 :(得分:0)

始终内联函数属性指示必须内联函数。 不管函数的特征如何,编译器都会尝试内联函数。

但是,如果使用内联属性,编译器不会内联函数,如果这样做会导致问题。例如,一个递归函数只能内联一次。

__ forceinline等效于__always_inline。

答案 1 :(得分:0)

本文提供了一些有用的信息: https://www.kernel.org/doc/local/inline.html

“在Linux中,关键字“ __always_inline”强制内联函数,而“ noinline”阻止内联函数。我们不使用“ inline”关键字,因为它已损坏。“

答案 2 :(得分:0)

这里没有一个答案可以真正回答何时应该使用内联而不是始终内联的问题,但是答案很简单。除非您确切地知道自己在做什么,并且了解内联要注释的函数的性能含义,否则应该几乎总是使用内联,因为糟糕的内联决策在最坏的情况下会使程序变慢,并且包括在执行时内联您不应该内联,也不应该在应该内联时内联。一般而言,在大多数情况下,编译器在决定这一点时非常聪明,但这并不完美。如果是这样,则不需要inline关键字。的确,C语言对于inline关键字的确切含义是很深奥的,因此您应该在使用它之前先读懂它,但是最好是最终决定是否将函数尽可能内联到编译器。

这就是说,当您优化代码的关键部分时(如果您不关心性能,为什么要内联代码呢?),有时编译器会做出错误的决定。在这种情况下,可以使用noinline或alwaysinline纠正行为。但是,在做出此决定之前,您应始终使自己熟悉所讨论的功能的组装;太多的内联会增加代码大小和寄存器压力,并降低缓存局部性。太少会使代码量级变慢。