Chinaunix首页 | 论坛 | 博客
  • 博客访问: 118175
  • 博文数量: 16
  • 博客积分: 1464
  • 博客等级: 上尉
  • 技术积分: 221
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-15 21:35
文章分类

全部博文(16)

文章存档

2011年(3)

2010年(7)

2009年(2)

2008年(1)

2006年(3)

我的朋友

分类: WINDOWS

2008-04-01 16:24:23

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

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

  • 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对个芯片,电路的操作。

 

 

 

 

阅读(1463) | 评论(0) | 转发(0) |
0

上一篇:c语言的库文件

下一篇:字符集概念

给主人留下些什么吧!~~