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