__always_inline 和 inline 之间的区别

2024-02-13

有一个很好的使用解释inline指示另一个问题 https://stackoverflow.com/questions/7762731/whats-the-difference-between-static-and-static-inline-function

谁能解释一下如果使用有什么区别inline and __always_inline在头文件上?

而且,当我更愿意__always_inline over inline或相反亦然?


这里的答案都没有真正回答何时应该使用内联而不是始终内联的问题,但答案相当简单。你几乎应该总是使用内联,除非你确切地知道你在做什么,并且理解内联你正在注释的函数的性能影响,因为一个糟糕的内联决策在最坏的情况下可能会使程序变得更慢,这包括在什么时候内联你不应该内联,并且当你应该内联时不内联。一般来说,在大多数情况下,编译器在决定这一点上是相当聪明的,但它并不完美;如果是的话,就不需要 inline 关键字。确实,C 语言对于 inline 关键字的确切含义非常深奥,因此您应该在使用它之前阅读它,但最好尽可能将是否将函数内联给编译器留下最终决定权。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

__always_inline 和 inline 之间的区别 的相关文章

随机推荐