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