C++ Programmer’s Guide - Silicon Graphics
作者: Silicon Graphics, Inc.
页数: 72页
文件大小: 197.31KB
文档编号: 007-0704-130
版本: MIPSpro 7.3
处理状态: done
文档简介
本指南是 Silicon Graphics MIPSpro C++ 编译器的官方文档,详细介绍了 SGI C++ 环境的架构、编译选项、ABI/ISA 差异以及模板实例化机制。虽然针对特定平台,但其中关于 C++ 编译器实现、ABI 兼容性、模板编译的技术内容具有通用参考价值。
核心内容结构
第1章 理解 Silicon Graphics C++ 环境
- 三种 C++ 编译器介绍
- ABI 和 ISA 概念
- N32、64、O32 编译模式对比
- OpenMP 并行化支持
- new/delete 运算符
- bool 和 wchar_t 类型
- 异常处理与 RTTI
第2章 编译、链接和运行 C++ 程序
- 编译流程
- 命令行示例
- 多语言程序(C/Fortran/Pascal)
- 目标文件工具
第3章 C++ 方言支持
- 编译器概述
- 新语言特性
- 未实现的语言特性
- 接受的过时特性
- Cfront 兼容模式
第4章 模板使用
- 模板实例化机制
- 自动实例化
- 显式实例化
- 模板 specialization
- 共享库和归档文件构建
- 从 Cfront 迁移
第5章 自动并行化选项 (APO)
- 并行化概念
- 自动并行化 vs 手动并行化
- APO 与编译器优化集成
关键知识点
1. 三种 ABI 对比
| 特性 | N32 (-n32) | 64 (-64) | O32 (-o32) |
|---|---|---|---|
| 默认 ISA | MIPS III | MIPS IV | MIPS II |
| 浮点寄存器 | 32 | 32 | 16 |
| 寄存器大小 | 64位 | 64位 | 32位 |
| int | 32位 | 32位 | 32位 |
| long int | 32位 | 64位 | 32位 |
| char* | 32位 | 64位 | 32位 |
重要: 不同 ABI 的对象文件不兼容,不能链接在一起。
2. 推荐编译配置
# R4x00 系统(MIPS III)
CC -n32 -mips3
# R5000/R8000/R10000/R12000 系统(MIPS IV)
CC -n32 -mips4
# 需要 64位地址空间的应用
CC -64 -mips43. 模板实例化选项
# 默认模式:预链接器自动实例化
CC -auto_include
# 小型/中型应用:编译时实例化所有引用
CC -ptused
# 构建模板库
CC -ptall -no_prelink
# 使用预实例化的模板实体
CC -ptnone -no_prelink4. pragma 指令控制模板实例化
// 实例化整个模板类
#pragma instantiate A<int>
// 抑制特定成员函数实例化
#pragma do_not_instantiate A<int>::f
// 允许在当前编译中实例化
#pragma can_instantiate void f(int, float)5. 异常处理与 RTTI
// 异常处理示例
try {
// 可能抛出异常的代码
} catch (const Exception& e) {
// 处理异常
} catch (...) {
// 捕获所有异常
}
// RTTI 示例
type_info& ti = typeid(MyClass);
void* ptr = dynamic_cast<void*>(obj);ABI 与 ISA 概念
ABI (Application Binary Interface)
定义系统接口,包括:
- 支持的指令集架构 (ISA)
- 地址空间大小
- 对象文件格式
- 调用约定
- 寄存器大小和数量
ISA (Instruction Set Architecture)
处理器识别的指令集合,是最低层软件与处理器之间的接口。
| ISA | 目标处理器 |
|---|---|
| MIPS IV | R5000, R8000, R10000, R12000 |
| MIPS III | R4000 (Rev 2.2+), R4400, R4600 |
| MIPS II | R4000 (Rev 2.1 及更早) |
| MIPS I | R2000, R3000 |
从 Cfront 迁移
选项映射表
| Cfront 选项 | CC 等效选项 | 说明 |
|---|---|---|
| -pta | -ptall | 实例化整个模板类 |
| -pte suffix | 无等效 | 指定源文件后缀 |
| -ptn | 手动模拟 | 单文件程序行为 |
| -ptrpath | 无等效 | CC 不使用仓库 |
| -pts | pragma | 精细控制实例化 |
| -ptv | -ptv | 详细模式 |
实践建议
- 开发环境选择: 推荐使用 N32 ABI 进行主要开发,根据 CPU 选择合适的 ISA
- 模板管理: 对于大型项目,使用 -ptused 在编译时实例化,避免链接时依赖
- 跨平台代码: 使用
#ifdef __EDG_ABI_COMPATIBILITY_VERSION保护新特性 - 构建系统: 修改 Makefile 以跟踪模板实现文件的变化
与其他知识的关联
- Modern C++ Design - Andrei Alexandrescu 的泛型编程思想
- The C++ Programming Language - Bjarne Stroustrup 的经典著作
- Effective C++ - Scott Meyers 的最佳实践
参考资料
- MIPSpro C++ Compiler Manual
- MIPSpro Compiling and Performance Tuning Guide
- MIPSpro N32 ABI Handbook
- OpenMP C/C++ API Specification