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

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

この 章では、次の情報を提供します。

1.1 Sun Studio 12 C++ 5.9 コンパイラの新機能

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

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

このリリースでは、32 ビットまたは 64 ビットバイナリのコンパイルを指定する方法が変更されました。「A.2.107 -xarch=isaオプションは、暗黙的なメモリーモデル (32 ビット ILP32 または 64 ビット LP64 のそれぞれの定義) で使用できなくなりました。現在は、対象プロセッサの命令セットの指定のみに使用します。

新しい 「A.2.50 -m32|-m64オプションを使用して、対象コンパイルのメモリーモデルを指定します。

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

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

1.1.2 x86 の特記事項

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

従来の Sun 仕様の並列化プログラムは、x86 では使用できません。代わりに OpenMP を使用してください。従来の並列化命令を OpenMP に変換する方法については、『Sun Studio 12: OpenMP API User’s Guide』を参照してください。

-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.1.3 バイナリの互換性の妥当性検査

Sun Studio 11 と Solaris 10 OS から、これらの特殊化された -xarch ハードウェアフラグを使用してコンパイルし、構築されたプログラムバイナリは、適切なプラットフォームで実行されることが確認されます。

Solaris 10 以前のシステムでは妥当性検査が行われないため、これらのフラグを使用して構築したオブジェクトが適切なハードウェアに配備されることをユーザが確認する必要があります。

これらの -xarch オプションでコンパイルしたプログラムを、適切な機能または命令セット拡張に対応していないプラットフォームで実行すると、セグメント例外や明示的な警告メッセージなしの不正な結果が発生することがあります。

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

1.2 準拠規格

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

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

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

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

1.3 C++ README ファイル

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

C++ README ファイルのテキスト版を表示するには、コマンドプロンプトで次のコマンドを入力してください。


example% CC -xhelp=readme

HTML 版の README を参照するには、Netscape Communicator 4.0 またはそれと互換性のあるブラウザで、次のファイルを開きます。

/opt/SUNWspro/docs/ja/index.html

C++ コンパイラソフトウェアが /opt ディレクトリにインストールされていない場合、システム管理者に実際のパスをお尋ねください。ブラウザは HTML 文書の一覧を表示します。README を開くには、一覧の上の対応するタイトルをクリックします。

1.4 マニュアルページ

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

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


example% man topic

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


example% man -s 3M ieee_flags

1.5 C++ ユーティリティー

次の C++ ユーティリティーは従来の UNIX® ツールに統合され、UNIX オペレーティングシステムに付属しています。

これら UNIX ツールについての詳細は、『プログラムのパフォーマンス解析』や関連するマニュアルページを参照してください。

1.6 各国語のサポート

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

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

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

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