C/C++函数调用规范

101 阅读1分钟

函数调用规范

调用约定调用规则
__cdecl函数参数从右往左依次入栈,由调用者平衡栈, C/C++默认的函数调⽤约定
__stdcall函数参数从右往左依次入栈,在被调函数内部平衡栈
__fastcall前几个参数通过寄存器传参,后面的参数从右往左依次入栈,在被调函数内部平衡栈

__fastcall采⽤寄存器传参,所以运⾏速度会更快;如果参数过多,会有⼀部分参数通过栈传递。

__fastcall调用规范

  • Win32平台(x86)

前两个参数采⽤ECX、EDX传递,其余参数采⽤栈传递

  • Win64平台(x64)

前4个参数采⽤RCX 、RDX 、R8、R9传递,其余参数采⽤栈传递 注:如果有this指针,则this指针通过RCX传递(作为第⼀个参数)

  • 64位Linux平台(x64)

前6个参数采⽤RDI、RSI、RDX、RCX、R8、R9传递,其余参数采⽤栈传递