3

我有一个 CRC 计算函数,它以极高的频率被调用。我已经宣布,因为inline我试图让它成为一个__attribute((hot))__,但我不确定这是否能买到任何东西。我正在考虑把它做成一个fastcall.

根据gcc 文档

fastcall 在 Intel 386 上,fastcall 属性使编译器在寄存器 ECX 中传递第一个参数(如果是整数类型),在寄存器 EDX 中传递第二个参数(如果是整数类型)。随后的和其他类型的参数在堆栈上传递。被调用的函数将从堆栈中弹出参数。如果参数的数量是可变的,则所有参数都被压入堆栈。

fastcall将使它本质上更快,因为输入参数将通过寄存器发送,而不是将它们推入堆栈。使用inline,编译器将用函数体替换函数调用。

所以问题是fastcall当使用时是否inline有意义?

4

1 回答 1

3

如您所说,如果您制作 function inline,编译器将简单地将其“粘贴”到您编写它的任何位置。

因此,不会调用任何内容,因此使用fastcall将毫无意义。

于 2012-07-05T21:41:17.813 回答