为内联函数指定调用约定是否有意义?例如,我正在编写SIMD数学库,建议使用__vectorcall
,但我的所有函数都是内联的。在一些文章中,我看到人们内联所有函数,并且仍然说,您需要使用默认的__vectorcall
约定(或实际放置此属性)编译库。
当函数不是内联函数时,我可以看到汇编的差异。但是为内联函数指定调用约定有什么意义,因为它实际上不是函数调用?仅仅为非内联函数指定__vectorcall
是不是更好?
答案 0 :(得分:4)
inline关键字只是对编译器的建议;它不保证函数将被内联。例如,递归函数不能内联,如果使用函数指针,编译器可能需要生成内联函数的非内联副本。此外,对内存和空间的限制可能会阻止编译器内联函数。
因此,即使您将内联函数标记,您仍然会在适当时指定调用约定,因为不能保证编译器确实会消除函数调用。