调用约定 | 参数暂存 | 清栈 | 清栈指令 |
__cdecl | 右-->左入栈(this最后一个入栈) | 调用者 | add esp,n*4; |
__thiscall | 右-->左入栈(ecx保存this) | 被调用者 | ret n*4; |
__fastcall | ecx,edx保存从左边开始前两个参数,右-->左入栈(ecx保存this) | 被调用者 | ret n*4; |
__stdcall | 右-->左入栈(this最后一个入栈) | 被调用者 | ret n*4; |
__declspec(naked) | 可与__cdecl, __thiscall, __fastcall, __stdcall连用; 在用于一般函数调用语法时,应返回代码应与相应约定一致 | 不定 | 如果函数中包含ret n*4;返回代码,则由被调用者自动清栈; 如果没有则由调用者使用add esp,n*4指令手动清栈。 |