函数调用约定(Function Calling Convention)是指在不同的编译器和操作系统中,函数调用时关于如何传递参数、如何返回结果值以及谁负责清理堆栈等事项的一套约定。这些约定确保了函数调用的一致性和可预测性。以下是对函数调用约定的对比:

调用约定

函数参数入栈顺序

平栈方式(在函数内部或外部)

备注

__cdecl

从右往左

外平栈

C语言默认调用约定

__stdcall

从右往左

内平栈

windows API默认调用约定

__thiscall

从右往左

内平栈

一般用于C++中,用ECX传递this指针

__fastcall

从右往左

内平栈

X64通用调用约定,前两个参数被分别放在了ecx,edx寄存器中,其余参数依次入栈

函数调用约定的对比_入栈