你有任何使用调用约定 fastcall 的真实用例吗?
谢谢。
__fastcall 尽可能在 CPU 寄存器中而不是堆栈中尝试传递函数参数,这样会更快。
这是 MSDN 文章的链接,解释了 __fastcall 调用约定:http: //msdn.microsoft.com/en-us/library/6xa169sk (VS.71).aspx
前两个 DWORD 或更小的参数在 ECX 和 EDX 寄存器中传递;所有其他参数都从右到左传递。
这意味着这仅适用于前两个参数并且仅当它们 <= 32 位时。
总的来说,我会说,不要指望这有什么大的性能优势。
这是一篇解释何时使用 fastcall 的文章。它实际上指定了一种情况,您实际上别无选择,只能使用它:
一些 VCL 类,例如 TList,允许您指定一个回调函数(在 TList 的情况下是一个排序例程)。在这种情况下,您也必须使用 __fastcall 关键字,正如 VCL 所期望的那样。
我有一个有效使用它的案例——它是一个非常小的 asm 例程(3 条指令),它操作寄存器中的单个值。
对于最小和最关键的例程,尽管调用约定应该没有什么区别。