複数の IPO オブジェクト・ファイルの生成

多くの場合、IPO はリンク時のコンパイルで 1 つのオブジェクト・ファイルを生成します。これは、非常に大きいアプリケーションでは効率が悪く、最悪の場合、アプリケーションで -ipo (Linux*) または /Qipo (Windows*) を使用できないこともあります。この問題を回避するには、次の 2 つの方法のいずれかを行います。1 つめは、サイズベースのヒューリスティックです。このヒューリスティックでは、大きいアプリケーションのリンク時のコンパイルにおいて複数のオブジェクト・ファイルを自動生成します。2 つ目の方法は、次のいずれかのオプションを使用して、マルチオブジェクト IPO を処理するようにコンパイラーに指示します。

Windows

Linux

説明

/QipoN

-ipoN

このオプションでは、N は生成するオブジェクト・ファイルの数です。

詳細は、次のトピックを参照してください。

  • -ipo コンパイラー・オプション

/Qipo-separate

-ipo-separate

各ソースファイルに対して個別の IPO オブジェクト・ファイルを作成するようコンパイラーに指示します。

詳細は、次のトピックを参照してください。

これらのオプションは、-ipo オプション (Linux) または /Qipo オプション (Windows) の代わりとして使用されます。マルチオブジェクト IPO コンパイルを明示的に指示すると、サイズベースのヒューリスティックはオフになります。

リンク時のコンパイルで生成されるファイルの数は、-ipo-c オプションまたは -ipo-S オプション (Linux)、/Qipo-c オプションまたは /Qipo-S オプション (Windows) が使用されていない限り表示されません。この場合、コンパイラーは番号をファイル名に追加します。例えば、次のコマンドを考えてみます。

プラットフォーム

コマンド例

Linux

icpc -ipo-separate -ipo-c a.o b.o c.o

Windows

icl a.obj b.obj c.obj /Qipo-separate /Qipo-c

Windows 上では、上記のコマンド例は ipo_out.objipo_out1.objipo_out2.obj、および ipo_out3.obj を生成します。Linux 上では、ファイル名は Windows の場合と同じですが、ファイルの拡張子は .o となります。

最初のオブジェクト・ファイルには、グローバルシンボルが含まれています。その他のオブジェクト・ファイルは、ソースファイルに対応しています。また、命名規則にはユーザー指定の名前が適用されます。

プラットフォーム

コマンド例

Linux

icpc -ipo-separate -ipo-c -o appl.o a.o b.o c.o

Windows

icl a.obj b.obj c.obj /Qipo-separate /Qipo-c -o appl.obj