C/C++项目中调用约定(编译器)的问题
2015-12-27 23:37
323 查看
1、c调用约定
c\c++项目中常用_cdecl修饰符使编译器按照c调用约定:即,函数调用方按照从右到左的顺序将其参数放入栈中,调用完之后调用方负责从栈中清除参数。
2、微软的调用约定
_stdcall,与C调用约定区别仅在于:调用完之后被调用者清除栈中的参数。(因此,参数可变函数不能使用这种调用约定。如,printf),其优点在于,每次函数调用不用通过代码清除栈上的参数,因此能够生成体积较小、运行较快的程序。
3、fastcall约定
类似于_stdcall调用约定,区别在于:它会向CPU寄存器最多传送2个参数。(将函数的前两个参数传送给ecx和edx)
c\c++项目中常用_cdecl修饰符使编译器按照c调用约定:即,函数调用方按照从右到左的顺序将其参数放入栈中,调用完之后调用方负责从栈中清除参数。
2、微软的调用约定
_stdcall,与C调用约定区别仅在于:调用完之后被调用者清除栈中的参数。(因此,参数可变函数不能使用这种调用约定。如,printf),其优点在于,每次函数调用不用通过代码清除栈上的参数,因此能够生成体积较小、运行较快的程序。
3、fastcall约定
类似于_stdcall调用约定,区别在于:它会向CPU寄存器最多传送2个参数。(将函数的前两个参数传送给ecx和edx)
相关文章推荐
- C语言项目总结
- C语言变长数组 struct中char data[0]的用法
- C语言字节对齐 __align(),__attribute((aligned (n))),#pragma pack(n)
- C++类的前置声明
- c++对象内存模型【内存布局】
- 【C++ STL应用与实现】16: 迭代器综述
- 实战c++中的智能指针unique_ptr系列-- unique_ptr的get()赋给普通指针后的崩溃(其实是生命周期惹的祸)
- 实战c++中的智能指针unique_ptr系列-- unique_ptr的get()赋给普通指针后的崩溃(其实是生命周期惹的祸)
- 求两个正整数的最大公约数,最小公倍数
- Effective C++ (item1、item 2)
- C++日志实现
- C语言实现乘法口诀表
- C++实现Prim算法
- CppUTest不太适合用来做C语言的单元测试
- C/C++学习(九)循环双链表的操作之创建,插入、删除
- C语言的预处理
- C语言变参函数
- C++标准库容器 vector
- C语言时间函数及结构化数据
- C++头文件重定义解决方式