cdecl, stdcall pascal fastcall 调用规则小结

_cdecl  C调用规则:

1.在后面的参数先进入堆栈;

2.在函数返回后,调用者要负责清除堆栈.所以这种调用常会生成较大的可执行程序.

3. C/C++的缺省调用协定,由调用者清理堆栈,这就是C/C++中可以使    
          用可变参数的函数的原因,所有参数自右至左入栈,生成的代码中    
          函数名有一个_(下划线)作前缀。  

__stdcall   又称为WINAPI, 其调用规则:

1.在后面的参数先进入堆栈;

2.被调用的函数在返回前自行清理堆栈,所以生成的代码比cdecl小.

 3. Win32   API的调用协定,由被调用的函数清理堆栈,所有参数自右至    
          左入栈,生成的代码中函数名有一个_(下划线)作前缀一个@和参数总    
          字节数(十进制)作後缀。它不支持可变参数,但它产生的代码比    
          _cdecl的短,因为没有每次调用後的清理堆栈的代码。

 

Pascal 调用规则:

Pascal调用规则主要用在案WIN16函数库中,现在基本不用.

1.参数在前的先进入堆栈;

2.不支持可变参数的函数调用.

fastcall
fastcall 是把函数参数列表的前三个参数放入寄存器eax,edx,ecx,其他参数压栈。
fastcall是BCB为了更好的兼容Delphi写的VCL而用的,delphi中的默认call是fastcall,是把函数参数列表的前三个参数放入寄存器,我估计你记错了,要么你再看看Help

下面的连接对各中调用规则进行了讨论:

http://msdn2.microsoft.com/en-us/library/k2b2ssfy.aspx

http://msdn2.microsoft.com/en-us/library/984x0h58.aspx

http://www.codeproject.com/cpp/calling_conventions_demystified.asp?df=100&forumid=3931&exp=0&select=1760667

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值