C++调用约定
__cdecl:
全称:C Declaration
参数传递:从右到左
堆栈清理:调用方负责清理堆栈
用途:默认用于C和C++程序,尤其是跨模块调用时。
特性:函数名不会被修饰(mangling),在链接时只使用函数名。
__stdcall:
参数传递:从右到左
堆栈清理:被调用方负责清理堆栈
用途:常用于WinAPI函数调用。
特性:函数名在编译后会被修饰(带有@后缀及参数字节数)。
__fastcall:
参数传递:前两个参数通过寄存器传递(通常是ECX和EDX),其余参数从右到左通过堆栈传递。
堆栈清理:被调用方负责清理堆栈
用途:常用于需要高效调用的函数。
特性:减小了堆栈操作开销,因而效率较高。
__thiscall:
用途:专用于C++类的成员函数。
参数传递:this指针通过ECX寄存器传递,其他参数从右到左通过堆栈传递。
堆栈清理:被调用方负责清理堆栈
__vectorcall:
用途:用于以矢量寄存器(如XMM/YMM寄存器)传递参数,适合需要处理大量浮点运算的函数。
参数传递:矢量类型通过寄存器传递,其他类型通过堆栈传递。
堆栈清理:被调用方负责清理堆栈。
__clrcall:
用途:用于托管代码(C++/CLI)。
特性:使用了托管堆栈,无需显式清理。