码迷,mamicode.com
首页 > 其他好文 > 详细

汇编对比函数参数进堆栈顺序

时间:2019-11-01 18:50:58      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:stdcall   cdecl   margin   size   ast   cal   pascal   函数   auto   

1、C语言函数参数是按照倒序进栈,即函数调用时,最右边的参数最先压栈,由调用者恢复堆栈指针。

 

2、Pascal语言函数约定和C约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。

 

3、 __stdcall 这是一种函数调用方式。 __stdcall方式函数的参数压栈顺序从右到左,是Pascal 缺省调用方式,通常用于win32 API中,自己在退出时清空栈。

    __stdcall将参数压栈是按C语言的顺序(从右到左),但与C语言不同的是它是由被调用者将参数从栈中清除,所以它的编译文件比_cdecl小。

    __stdcall是Windows  API函数中默认的调用约定,VB、VFP等也采用这个约定。

    __cdecl是C语言采用的默认调用方法,对于传送参数的内存栈却是由调用者来维护的。实现可变参数的调用只能用该方法。是MFC的缺省调用参数。

    __fastcall方式的函数采用寄存器传递参数,VC将函数编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。

汇编对比函数参数进堆栈顺序

标签:stdcall   cdecl   margin   size   ast   cal   pascal   函数   auto   

原文地址:https://www.cnblogs.com/alhope/p/11778464.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!