c++函数调用规则

    调用规则主要是指函数被调用的方式,常见的有_stdcall,_fastcall,_pascal等规则。不同的规则在参数压入堆栈的顺序是不同的,同时在有调用者清理压入堆栈的参数还是由被调用者清理压入堆栈的参数上也是不同的。一般来说,如果你没有显式的说明调用规则的话,编译器会统一按照_cdecl来处理(windows)。
        

 

参数传递方式

清栈方式

注意事项

应用场合

__stdcall

通过堆栈传递(由左至右)

由被调用者清栈(在函数返回之前清栈)

变参函数无法使用这种方式,由于参数不定,无法在编译时确定ret清栈的大小

windows API

__cdecl

通过堆栈传递(由左至右)

由调用者清栈(在函数返回之后清栈)

 

windows大多默认调用__cdcel

__fastcall

前两个参数由寄存器ecx和edx来传递传递,其余参数还是通过堆栈传递(从右到左

被调用者清理栈

1.不同编译器编译的程序规定的寄存器不同。在Intel 386平台上,使用ECX和EDX寄存器。

2.使用__fastcall方式无法用作跨编译器的接口

由于使用了寄存器传值,这种调用方式很快

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值