内联函数和调用约定

Inline functions and calling conventions

指定内联函数的调用约定是否有意义?例如,我正在编写 SIMD 数学库,建议使用 __vectorcall,但我的所有函数都是内联的。在一些文章中,我看到人们内联所有函数,但仍然说,您需要使用默认 __vectorcall 约定(或实际放置此属性)来编译库。
当函数不是内联时,我可以看到汇编中的差异。但是为内联函数指定调用约定有什么意义,因为它不是真正的函数调用?只为非内联函数指定 __vectorcall 不是更好吗?

inline关键字只是对编译器的一个建议;它不保证函数将被内联。例如,递归函数不能内联,如果您使用函数指针,编译器可能需要生成其他内联函数的非内联副本。此外,内存限制和 space 可能会阻止编译器内联函数。

因此,即使您将函数标记为内联,您仍然需要在适当的情况下指定调用约定,因为无法保证编译器确实会消除函数调用。