荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: flakey (烟酒不沾,才怪), 信区: Program
标  题: _stdcall, _cdecl, _fastcall, thiscall
发信站: 荔园晨风BBS站 (Mon Jul 14 18:36:59 2003), 站内信件

1、_stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到
左的压栈方式,自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划
线前缀,在函数名后加上"@"和参数的字节数。

2、C调用约定(即用__cdecl关键字说明)按从右至左的顺序压参数入栈,由调用
者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现
可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同


_cdecl是C和C++程序的缺省调用方式。每一个调用它的函数都包含清空堆栈的代
码,所以产生的可执行文件大小会比调用_stdcall函数的大。函数采用从右到左的
压栈方式。VC将函数编译后会在函数名前面加上下划线前缀。是MFC缺省调用约定


3、__fastcall调用约定是“人”如其名,它的主要特点就是快,因为它是通过寄
存器来传送参数的(实际上,它用ECX和EDX传送前两个双字(DWORD)或更小的参
数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内
存栈),在函数名修饰约定方面,它和前两者均不同。

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

4、thiscall仅仅应用于“C++”成员函数。this指针存放于CX寄存器,参数从右到
左压。thiscall不是关键词,因此不能被程序员指定。


--
  伤心流浪的汉子
  不需要关怀  不需要温暖  不需要爱情
  他的生命只需要飞 飞 不停的向前飞和不停的受伤

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.229]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店