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)
默认 ISAMIPS IIIMIPS IVMIPS II
浮点寄存器323216
寄存器大小64位64位32位
int32位32位32位
long int32位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 -mips4

3. 模板实例化选项

# 默认模式:预链接器自动实例化
CC -auto_include
 
# 小型/中型应用:编译时实例化所有引用
CC -ptused
 
# 构建模板库
CC -ptall -no_prelink
 
# 使用预实例化的模板实体
CC -ptnone -no_prelink

4. 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 IVR5000, R8000, R10000, R12000
MIPS IIIR4000 (Rev 2.2+), R4400, R4600
MIPS IIR4000 (Rev 2.1 及更早)
MIPS IR2000, R3000

从 Cfront 迁移

选项映射表

Cfront 选项CC 等效选项说明
-pta-ptall实例化整个模板类
-pte suffix无等效指定源文件后缀
-ptn手动模拟单文件程序行为
-ptrpath无等效CC 不使用仓库
-ptspragma精细控制实例化
-ptv-ptv详细模式

实践建议

  1. 开发环境选择: 推荐使用 N32 ABI 进行主要开发,根据 CPU 选择合适的 ISA
  2. 模板管理: 对于大型项目,使用 -ptused 在编译时实例化,避免链接时依赖
  3. 跨平台代码: 使用 #ifdef __EDG_ABI_COMPATIBILITY_VERSION 保护新特性
  4. 构建系统: 修改 Makefile 以跟踪模板实现文件的变化

与其他知识的关联


参考资料

  • MIPSpro C++ Compiler Manual
  • MIPSpro Compiling and Performance Tuning Guide
  • MIPSpro N32 ABI Handbook
  • OpenMP C/C++ API Specification