我有一个CRC计算功能,调用频率极高。我已经声明为inline
,我尝试将其设置为__attribute((hot))__
,但是我不确定是否可以购买任何东西。我正在考虑将其设置为fastcall
。
根据gcc docs,
快速通话
在Intel 386上,fastcall属性使编译器在寄存器ECX中传递第一个参数(如果是整数类型),并且
寄存器EDX中的第二个参数(如果是整数类型)。
后续和其他类型的参数在堆栈上传递。的
被调用的函数会将参数弹出堆栈。如果数量
arguments是变量,所有参数都压入堆栈。fastcall
将使它实质上更快,因为输入参数将通过寄存器发送,而不是将其压入堆栈。使用inline
,编译器会将函数调用替换为函数的主体。
那么问题是,与fastcall
一起使用时inline
甚至有意义吗?
最佳答案
如果您将函数设为inline
,那么编译器将简单地将其“粘贴”到您编写的位置,如您所说。
因此,什么都不会被调用,因此使用fastcall
将毫无意义。