gpt4 book ai didi

c - 为什么我不应该使用 __fastcall 而不是标准的 __cdecl?

转载 作者:可可西里 更新时间:2023-11-01 15:53:43 26 4
gpt4 key购买 nike

我听一些人说 __fastcall__cdecl__stdcall 快,因为它把两个参数放在寄存器中,而不是一个其他电话;但是,另一方面,这不是 C 中使用的标准。

我想知道是什么让 __fastcall 不像 C 中的标准那样令人讨厌,以及我什么时候会在我的代码中使用它。

最佳答案

x86 平台的不同寻常之处在于它没有定义全局 ABI 和调用约定。

Win32/x86 可以,它在 stdcall 上标准化。调用约定之间存在各种权衡——将参数放在寄存器中速度更快,但它会强制调用者溢出之前使用这些寄存器的任何内容。因此很难预测哪个性能更好。

重要的是要有一个统一的标准调用约定,以实现不同编译器(甚至不同编程语言)之间的互操作性。

其他平台没有cdeclstdcallfastcall 约定。他们没有相同的寄存器组。在某些情况下,他们甚至根本没有寄存器。但他们仍然可以使用 C 代码。

Win32/x86_64 不使用 stdcall,它使用体系结构定义的约定。

Linux/x86 也有约定。

关于c - 为什么我不应该使用 __fastcall 而不是标准的 __cdecl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13089752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com