函数堆栈和函数调用规范

函数堆栈

函数的调用必须通过堆栈来完成,函数堆栈实际上使用的是程序的堆栈内存空间,是在调用时动态进行分配的。

函数堆栈有三个作用:

  • 在进入函数之前保存环境变量和返回地址
  • 在进入函数时保存实参的拷贝
  • 在函数体中保存局部变量

函数调用规范

调用方式 参数传递和压栈方式 堆栈的清退者 备注
__cdecl 从右向左依次传递和压栈 调用函数 C++函数默认调用方式
可变参数的函数调用始终使用这种方式
__stdcall 从右向左依次传递和压栈 被调用函数 生成的函数代码体积比__cdecl小
CALLBACK就是__stdcall
_thiscall 从右向左依次传递和压栈 被调用函数 只能用于非静态函数的调用
静态函数的调用this指针保存在ECX寄存器,而不是函数堆栈
__fastcall 实参存入CPU寄存器 被调用函数 不能用于成员函数

你可能感兴趣的:(函数调用方式)