考虑到:
微软特定
__fastcall 调用约定指定函数的参数将在可能的情况下在寄存器中传递。以下列表显示了此调用约定的实现。
而且寄存器中的读/写时间比堆栈中的快得多,我们在 C# 中是否有任何 __fastcall 等效项?
考虑到:
微软特定
__fastcall 调用约定指定函数的参数将在可能的情况下在寄存器中传递。以下列表显示了此调用约定的实现。
而且寄存器中的读/写时间比堆栈中的快得多,我们在 C# 中是否有任何 __fastcall 等效项?
__fastcall 会自动使用,但仅在特定条件下使用。这是一篇关于这个主题的有趣文章:
2.一个方法中的参数不超过七个。
背后的原因是在.net中前两个参数比后两个参数快。让我解释一下。在 C# 中,每当调用方法时,参数都会被压入堆栈,然后由方法使用。现在微软的编译器(在 X86 中)有一种称为 __FASTCALL 的高级优化技术,其中前两个参数作为寄存器发送。现在据说这些已经注册。注册后,变量或参数具有快速通道提升,具有存储在处理器最快缓存中的专有特权。请注意,这通常是对我们在循环或迭代期间使用的变量“i”进行的,因此它的访问和使用确实变得非常快。因此,
LadaRaider,在 32 位 Arch 上,这意味着“最大寄存器的最大大小为 4 字节”,如果您传递一个占用 8 个字节的“Long Long”,它将使用 2 个 4 字节的寄存器,这就是编译器处理它的方式。假设您只能使用 3 个 4 字节的寄存器,因此,例如,您不能传递 2 个“Long Long”变量……一些数据必须进入慢得多的内存。