c – 为什么不应该使用__fastcall代替标准__cdecl?

前端之家收集整理的这篇文章主要介绍了c – 为什么不应该使用__fastcall代替标准__cdecl?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我会听一些人说__fastcall比__cdecl快,__stdcall因为它将两个参数放在寄存器中,而不是其他调用中的一个;但另一方面,这不是C中使用的标准.

我想知道什么使__fastcall不喜欢像C中的一个标准,当我将在我的代码中使用它.

解决方法

x86平台是不寻常的,因为它没有定义全局ABI和调用约定.

Win32 / x86是,它标准化在stdcall.在调用约定之间有各种折衷 – 将参数放入寄存器中更快,但是它强制调用者溢出以前使用这些寄存器的任何内容.所以很难预测哪一个更好的表现.

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

其他平台没有cdecl,stdcall或fastcall约定.他们没有相同的寄存器组.在某些情况下,他们甚至没有注册.但是他们仍然可以使用C代码.

Win32 / x86_64不使用stdcall,它使用架构定义的约定.

Linux / x86也有一个约定.

猜你在找的C&C++相关文章