函数堆栈
函数的调用必须通过堆栈来完成,函数堆栈实际上使用的是程序的堆栈内存空间,是在调用时动态进行分配的。
函数堆栈有三个作用:
- 在进入函数之前保存环境变量和返回地址
- 在进入函数时保存实参的拷贝
- 在函数体中保存局部变量
函数调用规范
调用方式 | 参数传递和压栈方式 | 堆栈的清退者 | 备注 |
__cdecl | 从右向左依次传递和压栈 | 调用函数 | C++函数默认调用方式 可变参数的函数调用始终使用这种方式 |
__stdcall | 从右向左依次传递和压栈 | 被调用函数 | 生成的函数代码体积比__cdecl小 CALLBACK就是__stdcall |
_thiscall | 从右向左依次传递和压栈 | 被调用函数 | 只能用于非静态函数的调用 静态函数的调用this指针保存在ECX寄存器,而不是函数堆栈 |
__fastcall | 实参存入CPU寄存器 | 被调用函数 | 不能用于成员函数 |