c/c++函数调用约定
1、函数调用约定一般规定如下三个方面:
1)函数参数的传递顺序和方式;
2)栈的维护;
3)名字修饰的策略。
2、常见的函数调用约定方式:
调用约定 | 出栈方式 | 参数传递 | 名字修饰 |
---|---|---|---|
cdecl | 函数调用方 | 从右至左的顺序压参数入栈 | 下划线+函数名 |
stdcall | 函数本身 | 从右至左的顺序压参数入栈 | 下划线+函数名+@+参数的字节数,如函数 int func(int a, double b)的修饰名是_func@12 |
fastcall | 函数本身 | 头两个(4字节)类型或占更少字节的参数被放入寄存器,其它剩下的参数按从右至左的顺序压参数入栈 | @+函数名+@+参数的字节数 |
pascal | 函数本身 | 从左至右的顺序压参数入栈 | 较为复杂,参见pascal文档 |