博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

zylinux

个性就是向前
   zylinux.cublog.cn
关于作者  
姓名:张闽
职业:学生
年龄:22
位置:
个性介绍:变化中

我的分类  




调用约定

很久没有开自己的博客 写点东西了,上班了就和以前不一样了,天天要对自己的工作负责

在高级语言中。常见的调用约定有:

  • stdcall
  • cdecl  
  • fastcall
  • thiscall
  • naked call

其实我个人认为 平时的时候碰到的比较多的是stdcall ,cdecl ,fastcall

stdcall 这个是标准调用约定,stdcall的调用约定意味着:1)参数从右向左压入堆栈,2)函数自身修改堆栈 3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸

这个我就简单的理解为,标准的调用约定,反正bcb里面用的比较多。

cdecl 这个是c调用约定,cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左压入堆栈。所不同的是,函数本身不清理堆栈,调用者负责清理堆栈。由于这种变化,C调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。

fastcall 这个是快速调用约定,我简单的理解成调用比较快,参数是存在寄存器里面的,当然比一般的内存快咯。函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈,被调用函数清理堆栈。

   说白了,其实调用约定没有什么好神秘的,就是一个调用的时候存储参数的方式不同,回收时回收的方式不同,当然有些头文件还是写的比较清晰的。

  说到程序,我现在的理解就是,永远是对一大堆变量复制判断,加上自己的思维(简称算法)。无论底层还是上层的应用程序,无论是嵌入式平台还是windows平台还是linux平台都是一样。到最后就是cpu对个芯片,电路的操作。

 

 

 

 

 发表于: 2008-04-01,修改于: 2008-04-01 16:24 已浏览173次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:3.52129

京ICP证041476号