调用约定
英文: Calling Convention.
别名: 调用方法, 调用规则.
调用约定 | 入栈顺序 | 清栈责任 |
---|---|---|
cdecl | 从右到左 | 调用者 |
stdcall | 从右到左 | 被调用者 |
fastcall | 从右到左(左边部分参数寄存器, 其他堆栈) | 被调用者 |
thiscall | 从右到左(this 寄存器) | 被调用者 |
pascal | 从左到右 | 被调用者 |
cdecl
为 C Declaration 的缩写, 是 C/C++ 的默认调用约定, 可变参数函数只能使用该调用约定.
stdcall
为 Standard Call 的缩写, Win API 只使用该调用约定和 vectorcall.
thiscall
是 C++ 非静态成员函数的默认调用约定.
通常, this 使用寄存器 cx 传递.
fastcall
部分参数利用寄存器传参, 以提高函数调用的效率.
通常, 左侧两个参数使用寄存器 dx, cx 传递.
pascal
是 Pascal/Delphi 所使用的调用约定.