【发布时间】:2011-03-01 13:06:53
【问题描述】:
您有任何使用调用约定 fastcall 的实际用例吗?
谢谢。
【问题讨论】:
-
显然它更快,因此更好;)。
-
参见@luvieere 参考文章:它并不快... :)
标签: c++ stack calling-convention
您有任何使用调用约定 fastcall 的实际用例吗?
谢谢。
【问题讨论】:
标签: c++ stack calling-convention
我有一个案例可以有效地使用它 - 它是一个非常小的 asm 例程(3 条指令),它操作寄存器中的单个值。
除了最小和最关键的例程之外,调用约定应该没有什么区别。
【讨论】:
__fastcall 尽量在 CPU 寄存器中而不是堆栈中传递函数参数,这样会更快。
这是 MSDN 文章的链接,该文章解释了 __fastcall 调用约定: http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspx
前两个 DWORD 或更小 参数在 ECX 和 EDX 中传递 寄存器;所有其他论点都是 从右到左传递。
这意味着这仅适用于前两个参数,并且仅适用于 总的来说,我会说,不要指望这有什么大的性能优势。
【讨论】:
Here 是一篇解释何时使用 fastcall 的文章。它实际上指定了一种情况,您实际上别无选择,只能使用它:
一些 VCL 类,例如 TList,允许 您指定一个回调函数(一个 在 TList 的情况下排序例程)。 您将不得不使用 __fastcall 在这种情况下,关键字也是 VCL 期待它。
【讨论】: