stdcall和cdecl:
stdcall和cdecl 压栈方向都是从右到左 区别在于c约定是调用方在函数返回后add esp,n指令清除堆栈中的参数,而stdcall在被调函数内使用ret n来清理堆栈内的参数。
另外c约定是可以使用可变数量参数的,而stdcall不可以,这是因为c约定清理工作由调用方做,调用方知道实际传入了多少参数,占用多大空间。而stdcall由被调方清理参数,如果用可变参数被调方不容易获取参数数量和尺寸。
fastcall和stdcall类似 只不过最左两个参数使用ecx edx寄存器传递。
本文详细对比了stdcall与cdecl这两种调用约定的区别。stdcall由被调用函数负责清理堆栈,适用于固定参数数量的情况;而cdecl则由调用者清理堆栈,支持可变参数数量。此外还介绍了fastcall的特点。
816

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



