分类: WINDOWS
2008-04-01 16:24:23
很久没有开自己的博客 写点东西了,上班了就和以前不一样了,天天要对自己的工作负责
在高级语言中。常见的调用约定有:
其实我个人认为 平时的时候碰到的比较多的是stdcall ,cdecl ,fastcall
stdcall 这个是标准调用约定,stdcall的调用约定意味着:1)参数从右向左压入堆栈,2)函数自身修改堆栈 3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸
这个我就简单的理解为,标准的调用约定,反正bcb里面用的比较多。
cdecl 这个是c调用约定,cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左压入堆栈。所不同的是,函数本身不清理堆栈,调用者负责清理堆栈。由于这种变化,C调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。
fastcall 这个是快速调用约定,我简单的理解成调用比较快,参数是存在寄存器里面的,当然比一般的内存快咯。函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈,被调用函数清理堆栈。
说白了,其实调用约定没有什么好神秘的,就是一个调用的时候存储参数的方式不同,回收时回收的方式不同,当然有些头文件还是写的比较清晰的。
说到程序,我现在的理解就是,永远是对一大堆变量复制判断,加上自己的思维(简称算法)。无论底层还是上层的应用程序,无论是嵌入式平台还是windows平台还是linux平台都是一样。到最后就是cpu对个芯片,电路的操作。