インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

コードサイズを最適化する手法

このセクションでは、インテル® コンパイラーの最適化機能を利用してオブジェクトと実行ファイルのサイズを小さくする方法に関するガイダンスを提供します。

最初に、パフォーマンスよりもコードサイズを優先するコンパイラー・オプションは 2 つあります。

速度よりもサイズを優先

Linux* および macOS*: -Os

Windows*: /Os

このオプションは、コードサイズが増えない最適化を有効にし、O2 より小さいサイズのコードを生成します。

Os オプションはコードサイズを大きくするだけでさほどの高速化にはつながらない最適化を無効にします。

コードサイズを最小化

Linux* および macOS*: -O1

Windows*: /O1

Os と比較して、O1 は一般にコードサイズを大きくするさらに多くの最適化を無効にします。O1 を指定すると、Os オプションがオンになります。

コードサイズを軽減する中間ステップとして、O1 を指定する前に、O3O2 に置換することができます。

O1 オプションは、分岐が多く、実行時間がループ内のコードに支配されない、非常に大きなコードサイズのアプリケーションでパフォーマンスを向上させます。

上記のオプションの詳細は、「コンパイラー・リファレンス」にある各オプションの説明を参照してください。

以降では、Os および O1 のデフォルトの動作と比較しても、コードサイズを向上する可能性がある手法について簡単 に説明します。

以下の表に、このセクションのトピックの要約を示します。

コードサイズを軽減する最も一般的な手法:

 

インライン展開の無効化または軽減

 

バイナリーからのシンボルの削除

 

インテルが提供するライブラリーの動的リンク

 

実行ファイルから未使用のコードとデータの除外

 

組込み関数の認識と展開の無効化

 

Linux* および macOS* システムでの例外処理データの最適化

コードサイズが非常に重要な場合にのみ使用する手法:

 

スタックではなくレジスターで引数を渡すことの無効化

 

ループアンロールの無効化

 

自動ベクトル化の無効化

特殊な状況下で使用する手法:

 

コンパイラー固有ライブラリーの参照の回避

 

不要な 16 バイト・アライメントの回避

以下に、考慮すべき重要なことを示します。

関連情報