调用规则主要是指函数被调用的方式,常见的有_stdcall,_fastcall,_pascal等规则。不同的规则在参数压入堆栈的顺序是不同的,同时在有调用者清理压入堆栈的参数还是由被调用者清理压入堆栈的参数上也是不同的。一般来说,如果你没有显式的说明调用规则的话,编译器会统一按照_cdecl来处理(windows)。
|
|
参数传递方式 |
清栈方式 |
注意事项 |
应用场合 |
|
__stdcall |
通过堆栈传递(由左至右) |
由被调用者清栈(在函数返回之前清栈) |
变参函数无法使用这种方式,由于参数不定,无法在编译时确定ret清栈的大小 |
windows API |
|
__cdecl |
通过堆栈传递(由左至右) |
由调用者清栈(在函数返回之后清栈) |
|
在windows大多默认调用__cdcel |
|
__fastcall |
前两个参数由寄存器ecx和edx来传递传递,其余参数还是通过堆栈传递(从右到左 |
被调用者清理栈 |
1.不同编译器编译的程序规定的寄存器不同。在Intel 386平台上,使用ECX和EDX寄存器。 2.使用__fastcall方式无法用作跨编译器的接口 |
由于使用了寄存器传值,这种调用方式很快 |
5万+

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



