关于在another question上使用inline指令,有一个很好的解释
有人能给我解释一下在头文件上使用inline和__always_inline有什么区别吗?
还有,什么时候我更喜欢__always_inline而不是inline,或者相反?
发布于 2020-05-01 06:52:09
这里没有一个答案真正回答了什么时候应该使用inline而不是always-inline的问题,但答案相当简单。你应该一直使用内联,除非你确切地知道你在做什么,并且了解内联你正在注释的函数的性能影响,因为在最坏的情况下,一个糟糕的内联决策可能会使程序变得更慢,这包括不应该内联时的内联和应该内联时不内联。一般来说,编译器在大多数情况下都很聪明,但它并不完美;如果是这样,就不需要inline关键字了。诚然,C语言对inline关键字的确切含义相当深奥,因此您应该在使用它之前仔细阅读,但最好将是否尽可能多地内联函数的最终决定权留给编译器。
也就是说,当您优化代码的关键部分时(如果您不关心性能,为什么要内联代码?),有时编译器会做出错误的决定。在这种情况下,您可以使用noinline或alwaysinline来纠正此行为。但在做出决定之前,您应该始终熟悉相关函数的程序集;过多的内联可能会增加代码大小和寄存器压力,并降低缓存位置。太少的代码会使代码变慢几个数量级。
发布于 2019-01-14 00:50:36
Always inline function属性指示函数必须是内联的。无论函数的特性如何,编译器都会尝试内联函数。
然而,对于内联属性,如果这样做会导致问题,编译器就不会内联函数。例如,一个递归函数只内联到它自身一次。
__forceinline等同于__always_inline。
发布于 2019-09-17 20:08:55
本文提供了一些有用的信息:https://www.kernel.org/doc/local/inline.html
在Linux中,关键字"__always_inline“强制函数被内联,而"noinline”阻止函数被内联。我们不使用"inline“关键字,因为它被破坏了。
https://stackoverflow.com/questions/20995309
复制相似问题