Oracle Solaris Studio 12.2: C++ ユーザーズガイド

第 1 章 C++ コンパイラの紹介

この章では、最新の Solaris Studio C++ コンパイラの概要について説明します。

1.1 Solaris Studio 12.2 C++ 5.11 コンパイラの新機能

この節では、Solaris Studio 12.2 C++ 5.11 コンパイラリリースに導入された新機能と変更された機能の概要を一覧に示します。

1.2 x86 の特記事項

x86 Solaris プラットフォーム用にコンパイルを行う場合に注意が必要な、重要な事項がいくつかあります。

従来の Sun スタイルの並列化プラグマがすべてのプラットフォームで使用できなくなりました。代わりに OpenMP を使用してください。従来の並列化命令を OpenMP に変換する方法については、『Solaris Studio 12.2: OpenMP API ユーザーズガイド』を参照してください。

-xarchssesse2sse2a、または sse3 以降に設定してコンパイルしたプログラムは、必ずこれらの拡張子と機能を提供するプラットフォームでのみ実行してください。

Solaris 9 4/04 以降の Solaris OS リリースは、Pentium 4 互換プラットフォームでは SSE/SSE2 に対応しています。これより前のバージョンの Solaris OS は SSE/SSE2 に対応していません。-xarch で選択した命令セットが、実行中の Solaris OS で有効ではない場合、コンパイラはその命令セットのコードを生成またはリンクできません。

コンパイルとリンクを個別に行う場合は、必ずコンパイラを使ってリンクし、同じ -xarch 設定で正しい起動ルーチンがリンクされるようにしてください。

x86 の 80 ビット浮動小数点レジスタが原因で、x86 での演算結果が SPARC の結果と異なる場合があります。この差を最小にするには、--fstore オプションを使用するか、ハードウェアが SSE2 をサポートしている場合は -xarch=sse2 でコンパイルします。

Solaris と Linux でも、固有の数学ライブラリ (たとえば、sin(x)) が同じではないため、演算結果が異なることがあります。

1.3 64 ビットプラットフォーム用のコンパイル

ILP32 32 ビットモデル用にコンパイルするには、—m 32 オプションを使用します。ILP64 64 ビットモデル用にコンパイルするには、—m64 オプションを使用します。

ILP 32 モデルでは、C++ 言語の int、long、およびポインタデータ型はすべて 32 ビット幅であることを指定します。long およびポインタデータ型を指定する LP64 モデルは、すべて 64 ビット拡張です。Solaris および Linux OS は、LP64 メモリーモデルの大きなファイルや配列もサポートします。

-m64 を使用してコンパイルを行う場合、結果の実行可能ファイルは、64 ビットカーネルを実行する Solaris OS または Linux OS の 64 ビット UltraSPARC または x86 プロセッサでのみ動作します。コンパイル、リンク、および 64 ビットオブジェクトの実行は、64 ビット実行をサポートする Solaris または Linux OS でのみ行うことができます。

1.4 バイナリの互換性の妥当性検査

Solaris システムの Sun Studio 11 以降では、Solaris Studio コンパイラによってコンパイルされたプログラムのバイナリには、そのコンパイル済みバイナリによって想定されている命令セットを示すアーキテクチャーハードウェアフラグが付いています。実行時にこれらのマーカーフラグが検査され、実行しようとしているハードウェアで、そのバイナリが実行できることが確認されます。

プログラムにこれらのアーキテクチャーハードウェアフラグが含まれない場合、またはプラットフォームが適切な機能または命令セット拡張に対応していない場合、プログラムを実行することによりセグメント例外、または明示的な警告メッセージなしの不正な結果が発生することがあります。

このことは、.il インラインアセンブリ言語関数を使用しているプログラムや、SSE、SSE2、SSE2a、SSE3 の命令、およびより新しい命令と拡張機能を利用している __asm() アセンブラコードにも当てはまります。

1.5 準拠規格

この C++ コンパイラ (CC) は、ISO International Standard for C++, ISO IS 14882:2003, Programming Language - C++ に準拠しています。このリリースに含まれる README (最新情報) ファイルには、この規格の仕様と異なる記述が含まれています。

SPARC プラットフォームでは、このコンパイラは、UltraSPARC の実装と SPARC V8 と SPARC V9 の「最適化活用」機能をサポートします。これらの機能は、Prentice-Hall から出版された SPARC International による『SPARC アーキテクチャ・マニュアル バージョン 8 』(トッパン刊) と『SPARC ArchitectureManual, Version 9』(ISBN 0-13-099227-5) (英語版のみ)に定義されています。

このマニュアルでは、「標準」は、前述の規格の各バージョンに準拠していることを意味します。「非標準」および「拡張」は、これらの規格のバージョンに準拠しない機能のことを指します。

これらの標準は、それぞれの標準を策定する組織によって改訂されることがあります。したがって、コンパイラが準拠するバージョンの規格が改訂されたり、完全に書き換えられた場合、機能によっては、Solaris Studio C++ コンパイラの将来のリリースで前のリリースと互換性がなくなる場合があります。

1.6 C++ README ファイル

C++ コンパイラの readme ファイルでは、コンパイラに関する重要な情報について説明しています。これは、『Oracle Solaris Studio 12.2 リリースの新機能』ガイドの一部となりました。次の内容が含まれています。

新機能』ガイドには、このリリースのドキュメント索引 (http://www.oracle.com/technetwork/server-storage/solarisstudio/documentation) からアクセスできます。

1.7 マニュアルページ

オンラインのマニュアルページ (man) では、コマンドや関数、サブルーチン、およびその機能に関する情報を簡単に参照できます。

マニュアルページを表示するには、次のように入力してください。


example% man topic

C++ のドキュメント全体を通して、マニュアルページのリファレンスは、トピック名とマニュアルページの節番号で表示されます。CC(1) を表示するには、man CC と入力します。1 以外の節 (ieee_flags(3M) など) には、次のように man コマンドで -s オプションを使用してアクセスできます。


example% man -s 3M ieee_flags

1.8 各国語のサポート

このリリースの C++ では、英語以外の言語を使用したアプリケーションの開発をサポートしています。対象としている言語は、ヨーロッパのほとんどの言語、中国語、日本語です。このため、アプリケーションをある言語から別の言語に簡単に置き換えることができます。この機能を国際化と呼びます。

通常 C++ コンパイラでは、次のように国際化を行なっています。

変数名は国際化できません。必ず英語の文字を使用してください。

アプリケーションをある国の言語から別の国の言語に変更するには、ロケールを設定します。言語の切り換えのサポートに関する情報については、オペレーティングシステムのドキュメントを参照してください。