Sun Studio 12 Update 1: C++ ユーザーズガイド

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

章では、現在の Sun Studio C++ コンパイラに関する一般情報を説明します。。

1.1 Sun Studio 12 Update 1 C++ 5.10 コンパイラの新機能

この節では、Sun Studio 12 Update 1 C++ 5.10 コンパイラリリースで導入された新機能を簡単に説明します。各項目に記されている参照先に詳しい説明があります。

1.2 x86 の特記事項

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

従来の Sun 仕様の並列化プログラムは、x86 では使用できません。代わりに OpenMP を使用してください。古い並列化命令を OpenMP に変換する方法については、『Sun Studio 12 Update 1: 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 でコンパイルします。

イントリンシック算術ライブラリ (sin(x) など) が異なるため、Solaris と Linux でも演算結果が数値的に異なる場合があります。

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

ILP32 32 ビットモデル用にコンパイルするには、—m32 オプションを使用します。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 以降では、Sun Studio コンパイラによってコンパイルされたプログラムのバイナリには、そのコンパイル済みバイナリによって想定されている命令セットを示すアーキテクチャーハードウェアフラグが付いています。実行時にこれらのマーカーフラグが確認され、実行しようとしているハードウェアで、そのバイナリが実行できることが確認されます。

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

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

1.5 準拠規格

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

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

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

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

1.6 C++ README ファイル

C++ コンパイラの README ファイルでは、コンパイラに関する重要な情報を取り上げています。これらの情報は次のとおりです。

Sun Studio の今回のリリースと以前のリリースに関する C++ コンパイラの Readme は、Sun Developer Network の Sun Studio ポータル http://developers.sun.com/sunstudio/documentation で入手できます。

1.7 マニュアルページ

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

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


example% man topic

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


example% man -s 3M ieee_flags

1.8 各国語のサポート

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

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

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

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