6

你有任何使用调用约定 fastcall 的真实用例吗?

谢谢。

4

3 回答 3

5

__fastcall 尽可能在 CPU 寄存器中而不是堆栈中尝试传递函数参数,这样会更快。

这是 MSDN 文章的链接,解释了 __fastcall 调用约定:http: //msdn.microsoft.com/en-us/library/6xa169sk (VS.71).aspx

前两个 DWORD 或更小的参数在 ECX 和 EDX 寄存器中传递;所有其他参数都从右到左传递。

这意味着这仅适用于前两个参数并且仅当它们 <= 32 位时。
总的来说,我会说,不要指望这有什么大的性能优势。

于 2010-06-09T08:35:25.913 回答
3

是一篇解释何时使用 fastcall 的文章。它实际上指定了一种情况,您实际上别无选择,只能使用它:

一些 VCL 类,例如 TList,允许您指定一个回调函数(在 TList 的情况下是一个排序例程)。在这种情况下,您也必须使用 __fastcall 关键字,正如 VCL 所期望的那样。

于 2010-06-09T08:05:10.947 回答
1

我有一个有效使用它的案例——它是一个非常小的 asm 例程(3 条指令),它操作寄存器中的单个值。

对于最小和最关键的例程,尽管调用约定应该没有什么区别。

于 2010-06-09T09:47:21.417 回答