本文档深入探讨了不同C++编译器和操作系统下的调用约定(Calling Conventions)及其在计算机科学中的重要性。作者Agner Fog,来自哥本哈根工程大学,针对版权日期2004年至2011年,最近更新于2011年6月8日,提供了详尽的指南。文档结构包括: 1. **介绍**:首先概述了调用约定的概念,它定义了函数参数传递、返回值和局部变量如何在程序的不同部分之间进行管理和操作。这是确保代码可移植性和性能的关键。 2. **标准化的必要性**:解释了为什么对不同的编译器和系统制定统一的调用约定标准是至关重要的,这有助于避免兼容性问题,并提高代码的可理解和维护性。 3. **数据表示**:这部分讨论了内存中的数据布局,包括基本类型、对象和结构体,以及它们在不同架构上的存储方式。 4. **数据对齐**:关注内存对齐规则,即为了提高处理器性能而对数据在内存中的存储位置进行优化的方式。 5. **栈对齐**:着重于栈内存的管理,特别是对于函数调用时参数和局部变量的存储安排。 6. **寄存器使用**:详细解析了不同编译器如何使用寄存器,如64位Windows中的浮点寄存器和YMM向量寄存器,以及在内核代码中的特定策略。 7. **函数调用约定**:这部分详细讨论了函数参数的传递和返回,包括对象和SIMD类型(单指令多数据)的处理。 8. **名称 mangling**:介绍了各种编译器如Microsoft、Borland、Watcom、GNU、Intel等使用的名称编码技术,用于生成唯一且可解码的函数名,以便链接器找到正确的函数。 9. **异常处理和栈 unwind**:涉及如何处理程序运行时异常,以及如何恢复堆栈状态以支持异常退出和错误处理。 10. **初始化和终止函数**:讲述如何正确执行函数的开始和结束,包括构造函数、析构函数和其他相关的初始化/清理工作。 11. **虚拟表和运行时类型识别**:解释了动态类型系统中的关键概念,如虚拟函数表和如何在运行时确定对象的实际类型。 12. **通信和协作**:可能涵盖了线程间的通信机制,以及如何通过调用约定来协调这些操作。 本文是一份关于C++编译器调用约定的全面指南,对于编写跨平台可移植的高性能代码,理解编译器底层行为以及进行高效性能优化具有很高的价值。阅读者可以通过这份资料了解到不同环境下的最佳实践,从而提升代码质量和效率。
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 7
- 资源: 888
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)