| 调用约定 | 参数传递方向 | 谁清理栈 | 使用场合 | 修饰函数符号表格式 |
| __cdecl | 从右向左 | 调用方 | C/C++、MFC的默认方式; 可变参数的时候使用 | _函数名 |
| __stdcall | 从右向左 | 被调用方退出函数时清理 | Win API | _函数名@参数名 |
| __fastcall | 从右向左, 但左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数自右向左压栈传送 | 被调用方退出函数时清理 | 要求速度快 (毕竟用了寄存器) | @函数名@参数字节大小 |
本文深入解析了三种主要的调用约定:__cdecl、__stdcall和__fastcall,详细说明了参数的传递方向、栈的清理责任及适用场景。__cdecl适用于C/C++、MFC的默认调用方式,支持可变参数;__stdcall常见于WinAPI中,由被调用方清理栈;而__fastcall则通过寄存器传递前两个参数以提升速度。
| 调用约定 | 参数传递方向 | 谁清理栈 | 使用场合 | 修饰函数符号表格式 |
| __cdecl | 从右向左 | 调用方 | C/C++、MFC的默认方式; 可变参数的时候使用 | _函数名 |
| __stdcall | 从右向左 | 被调用方退出函数时清理 | Win API | _函数名@参数名 |
| __fastcall | 从右向左, 但左边开始的两个不大于4字节(DWORD)的参数分别放在ECX和EDX寄存器,其余的参数自右向左压栈传送 | 被调用方退出函数时清理 | 要求速度快 (毕竟用了寄存器) | @函数名@参数字节大小 |

被折叠的 条评论
为什么被折叠?