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

A.2.142 -xlinkopt[= レベル]

オブジェクトファイル内のあらゆる最適化のほかに、 結果として出力される実行可能ファイルや動的ライブラリに対してリンク時の最適化も行うようコンパイラに指示します。このような最適化は、リンク時にオブジェクトのバイナリコードを解析することによって実行されます。オブジェクトファイルは書き換えられませんが、最適化された実行可能コードは元のオブジェクトコードとは異なる場合があります。

-xlinkopt をリンク時に有効にするには、少なくともコンパイルコマンドで -xlinkopt を使用する必要があります。-xlinkopt を指定しないでコンパイルされたオブジェクトバイナリについても、オプティマイザは限定的な最適化を実行できます。

-xlinkopt は、コンパイラのコマンド行にある静的ライブラリのコードは最適化しますが、コマンド行にある共有 (動的) ライブラリのコードは最適化しません。共有ラ イブラリを構築する場合 (-G でコンパイルする場合) にも、-xlinkopt を使用できます。

A.2.142.1 値

level は、実行する最適化のレベルを 0、1、2 のいずれかで設定します。最適化レベルは、次のとおりです。

表 A–37 -xlinkopt の値

値 

意味  

リンクオプティマイザは無効ですこれがデフォルトです。 

リンク時の命令キャッシュカラーリングと分岐の最適化を含む、制御フロー解析に基づき最適化を実行します。 

リンク時のデッドコードの除去とアドレス演算の簡素化を含む、追加のデータフロー解析を実行します。 

コンパイル手順とリンク手順を別々にコンパイルする場合は、両方の手順に -xlinkopt を指定する必要があります。

example% cc -c -xlinkopt a.c b.c
example% cc -o myprog -xlinkopt=2 a.o

レベルパラメータは、コンパイラのリンク時にだけ使用されます。前述の例では、オブジェクトバイナリが指定された 1 のレベルでコンパイルされていても、リンクオプティマイザレベルは 2 です。

デフォルト

レベルパラメータなしで -xlinkopt を使用することは、-xlinkopt=1 を指定することと同じです。

相互の関連性

このオプションは、プログラム全体のコンパイル時に、プロファイルのフィードバックとともに使用されると、もっとも効果的です。プロファイリングによって、コードでもっともよく使用される部分と、もっとも使用されない部分が明らかになるので、それに基づき処理を集中するよう、構築はオプティマイザに指示します。これは、リンク時に実行されるコードの最適な配置が命令のキャッシュミスを低減できるような、大きなアプリケーションにとって特に重要です。このようなコンパイルの例を次に示します。


example% cc -o progt -xO5 -xprofile=collect:prog file.c
example% progt
example% cc -o prog -xO5 -xprofile=use:prog -xlinkopt file.c

プロファイルフィードバックの使用方法についての詳細は、「A.2.170 -xprofile=pを参照してください。

警告

-xlinkopt でコンパイルする場合は、-zcombreloc リンカーオプションは使用しないでください。

このオプションを指定してコンパイルすると、リンク時間がわずかに増えます。オブジェクトファイルも大きくなりますが、実行可能ファイルのサイズは変わりません。-xlinkopt-g を指定してコンパイルすると、デバッグ情報が取り込まれるので、実行可能ファイルのサイズが増えます。