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

时间:2010-06-09 08:01:39

标签: c++ stack calling-convention

您是否有使用调用约定fastcall的真实用例?

感谢。

3 个答案:

答案 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条指令),它操纵寄存器中的单个值。

除了最小和最具性能关键的例程之外的任何事情,尽管调用约定应该没有区别。