使用调用约定 fastcall 有什么实际用例吗?
您有使用调用约定 fastcall 的实际用例吗?
谢谢。
Have you had any real use case for using the calling convention fastcall?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果可能的话,__fastcall 尝试在 CPU 寄存器而不是堆栈中传递函数参数,这样速度更快。
以下是解释 __fastcall 调用约定的 MSDN 文章的链接:
http://msdn.microsoft.com/en-us/库/6xa169sk(VS.71).aspx
这意味着这仅适用于前两个参数,并且仅当它们 <= 32 位时才有效。
总的来说,我想说,不要指望由此带来任何巨大的性能优势。
__fastcall tries to pass the function arguments in the CPU registers instead of the stack if possible, which is faster.
Here's a link to an MSDN article explaining the __fastcall calling convention:
http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspx
This means this will only work for the first two arguments and only if they're <= 32 Bits.
In general I would say, don't expect any big performance advantages from this.
这里有一篇文章解释何时使用 fastcall。它实际上指定了一种情况,当你实际上别无选择只能使用它时:
Here's an article explaining when to use fastcall. It actually specifies a case when you actually have no alternative but to use it:
我在一个例子中有效地使用了它——它是一个非常小的 asm 例程(3 条指令),它操作寄存器中的单个值。
对于除了最小和对性能最关键的例程之外的任何例程,调用约定实际上应该没有什么区别。
I have one case where I use it effectively - it's a very small asm routine (3 instructions) which manipulates a single value in a register.
For anything but the very smallest and most performance-critical routines though the calling convention should really make no difference.