c++ - 内联函数和调用约定

标签 c++ visual-c++ inline simd calling-convention

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

最佳答案

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

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

关于c++ - 内联函数和调用约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37899784/

相关文章:

c++ - 在Visual Studio C++中写入函数引发读取访问冲突异常

c++ - 类模板和函数的显式特化

jQuery UI slider : how to inline it?

c++ - .cpp 文件中类型相同但主体不同的内联函数

c++ - 如何将元素从 vector 转移到新数组?

c++ - 什么是类中的内联数据?

c++ - 如何访问子 UI 文件

c++ - 我应该从源代码编译一个库吗?

c++ - 将带有模板参数的方法传递给宏

c++ - Visual C++ 2015 不会编译模板代码