使用调用约定 fastcall 有什么实际用例吗?

发布于 2024-09-05 01:59:33 字数 44 浏览 7 评论 0原文

您有使用调用约定 fastcall 的实际用例吗?

谢谢。

Have you had any real use case for using the calling convention fastcall?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

痴梦一场 2024-09-12 01:59:33

如果可能的话,__fastcall 尝试在 CPU 寄存器而不是堆栈中传递函数参数,这样速度更快。

以下是解释 __fastcall 调用约定的 MSDN 文章的链接:
http://msdn.microsoft.com/en-us/库/6xa169sk(VS.71).aspx

前两个 DWORD 或更小
参数在 ECX 和 EDX 中传递
寄存器;所有其他参数都是
从右向左传递。

这意味着这仅适用于前两个参数,并且仅当它们 <= 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

The first two DWORD or smaller
arguments are passed in ECX and EDX
registers; all other arguments are
passed right to left.

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.

风追烟花雨 2024-09-12 01:59:33

这里有一篇文章解释何时使用 fastcall。它实际上指定了一种情况,当你实际上别无选择只能使用它时:

一些 VCL 类,例如 TList,允许
您指定一个回调函数(a
TList 情况下的排序例程)。
您必须使用 __fastcall
在这种情况下,关键字也作为 VCL
期待它。

Here's an article explaining when to use fastcall. It actually specifies a case when you actually have no alternative but to use it:

Some VCL classes, such as TList, allow
you to specify a callback function (a
sort routine in the case of TList).
You will have to use the __fastcall
keyword in this case, too, as the VCL
expects it.

说不完的你爱 2024-09-12 01:59:33

我在一个例子中有效地使用了它——它是一个非常小的 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文