リンカーによる関数と変数の最適な順序の並べ替えを有効にします。
このオプションは、関数とデータ変数を細分化された別々のセクションに配置するようコンパイラに指示します。これでリンカーは、リンカーの -M オプションで指定されたマップファイル内の指示に従ってこれらのセクションの順序を並べ替えてプログラムのパフォーマンスを最適化することができます。通常は、この最適化によって効果が上がるのは、プログラムの実行時間の多くがページフォルト時間に費やされている場合だけです。
変数を並べ替えることによって、実行時間のパフォーマンスにマイナスの影響を与える次のような問題を解決できます。
メモリー内で関係ない変数どうしが近接しているために生じる、キャッシュやページの競合
関係のある変数がメモリー内で離れた位置にあるために生じる、不必要に大きな作業セットサイズ
使用していない weak 変数のコピーが有効なデータ密度を低下させた結果生じる、不必要に大きな作業セットサイズ
最適なパフォーマンスを得るために変数と関数の順序を並べ替えるには、次の処理が必要です。
-xF によるコンパイルとリンク
『プログラムのパフォーマンス解析』マニュアル内の、関数のマップファイルを生成する方 法に関する指示に従うか、または、『リンカーとライブラリ』内の、データのマップ ファイルを生成する方法に関する指示に従います。
リンカーの -M オプションを使用して新しいマップファイルを再リンクします。
アナライザで再実行して、パフォーマンスが向上したかどうかを検証します。
v には、次のいずれかを指定します。
表 B–23 -xF の値
値 |
意味 |
---|---|
[no%]func |
関数を個々のセクションに細分化します [しません]。 |
[no%]gbldata |
大域データ (外部リンケージのある変数) を個々のセクションに細分化します [しません]。 |
[no%]lcldata |
局所データ (内部リンケージのある変数) を個々のセクションに細分化します [しません]。 |
%all |
関数、大域データ、局所データを細分化します。 |
%none |
何も細分化しません。 |
-xF を指定しない場合のデフォルトは、-xF=%none です。引数を指定しないで -xF を指定した場合のデフォルトは、-xF=%none,func です。
-xF=lcldata を指定するとアドレス計算最適化が一部禁止されるので、このフラグは実験として意味があるときにだけ使用するとよいでしょう。
analyzer(1)、debugger(1)、ld(1) のマニュアルページも参照してください。