
C++调用约定详解:stdcall, cdecl,fastcall与thiscall
下载需积分: 10 | 81KB |
更新于2024-07-26
| 49 浏览量 | 举报
收藏
C++中的函数调用约定主要有四种形式:\_\_stdcall、\_\_cdecl、\_\_fastcall 和 thiscall,每种约定对参数传递、堆栈管理以及性能影响都有所不同。
1. \_\_stdcall (标准C语言调用):
- 这是Pascal程序的默认调用方式,常用于Windows API中。
- 参数采用从右至左的压栈方式。
- 函数退出时自行清理堆栈,但调用者负责维护内存栈。
- VC编译器会在函数名前添加下划线前缀,并根据参数字节数追加后缀。
- 缺省调用约定,可能使可执行文件较大。
2. \_\_cdecl (常规C/C++调用):
- C和C++程序的默认调用方式。
- 也是按从右至左压栈参数。
- 调用者负责清理堆栈,包括管理内存。
- 常用于支持可变参数函数。
- 函数名前有下划线前缀。
3. \_\_fastcall (快速调用):
- 注重速度,通过寄存器传递前两个双字参数,其余压栈。
- 快速,但不适用于所有参数类型。
- 调用者在函数返回前清理寄存器使用的内存。
- 函数名前缀是"@",后跟参数字节数。
4. thiscall (内联成员函数调用):
- 专用于C++中的成员函数,特别是类实例。
- this指针存储在CX寄存器,参数从右向左压栈。
- 不是关键字,不能被程序员直接指定,仅在类方法中使用。
5. nakedcall (裸调用):
- 非常规调用方式,当使用其他约定时需要额外处理特定寄存器。
- 编译器不会自动保存或恢复ESI、EDI、EBX和EBP寄存器。
- 需要与\_declspec一起使用,以避免编译器插入额外的代码。
了解这些调用约定有助于编写高效的C++代码,特别是在处理性能敏感的场景和不同库之间的交互时。选择合适的调用约定能优化代码大小、提高执行效率,并确保与其他API或库的兼容性。在实际编程中,开发者应根据项目需求和特定平台的要求来选择最合适的调用约定。
相关推荐










李奥纳多
- 粉丝: 0
最新资源
- 自制AT89c51下载器电路图指南
- Visual Basic 2005基础教程:逐步精通指南
- 医院ASP病历管理系统构建与实践研究
- 7z压缩自解压技术:免安装的封装解决方案
- 计算机专业毕业生IT笔试题集锦
- MFC环境下界面背景颜色的优化设置方法
- KesionCMSV6正式版发布:新功能与重要修复
- 图形代码生成软件的应用与图像处理技术
- 深入研究Spring2.5源代码解析
- VC6.0编写的Google翻译源代码解析与API调用
- C#窗体抖动效果实现与源码分享
- 华成英主编《模拟电子》第四版习题答案分享
- 掌握注册表技巧,管理计算机的必备指南
- C++ Builder实现Windows鼠标输入功能
- 51学习板USB转串口驱动程序下载指南
- Linux平台下MySQL数据库的收银系统完整代码解析
- 精选多样风格PPT模板下载
- MVC模式下的网上购物商城系统构建与管理
- 890参数设置手册使用指南
- 创新按钮设计:图像与文字分离交互方式
- RPR220在电子比赛小车控制中的原理与应用
- 全国电子设计竞赛一等奖宽带放大器设计解析
- 十四路无线数显抢答器的设计原理与制作教程
- C51单片机编程宝典:48个实例精通教程