次の方法で共有


コードの最適化

更新 : 2007 年 11 月

最適化とは、パフォーマンスの最速化とコード サイズの最小化を実現するために、実行可能プログラムのパフォーマンスを細かく調整するプロセスです。Visual C++ には、コードの最適化のための以下の機構が用意されています。

プログラムのパフォーマンスの向上

プログラムのパフォーマンスを向上させるプログラミングの方法については、以下のトピックを参照してください。

コードの最適化について

最適化を行うと、コンパイラで作成したコードが変更されます。このため、すべてのテストおよびデバッグが完了してからコードの最適化を行うことをお勧めします。この方法では、ソース コードにほぼ一致するコードをデバッグできるため、最適化のコードへの影響について考慮する必要がありません。最適化を実行した後で、コードを再テストしてください。最適化を実行すると、コードの動作が変わることがあります。その場合は、最適化されたコードのデバッグが必要になります。詳細については、「リリース ビルド作成時によくある問題」も参照してください。

最適化されたコードは動作が変わる場合がありますが、これはエラーによるものではなく、最適化によって計算の順序が変更されるため、浮動小数点の精度の制限により多少異なった結果が生じるからです。

また、最適化したコードをコンパイルすると、新たに警告メッセージが表示されることがあります。多くの場合、このような警告は最適化されたコードだけに関連するものであり、これは正常な動作です。これらの警告をよく確認すると、最適化に関する問題のほとんどを回避できます。

また、高速化のためにプログラムを最適化した結果、逆に速度が遅くなってしまうこともありますが、これは最適化によってコード サイズが大きくなるためです。たとえば、関数をインライン展開すると関数呼び出しのオーバーヘッドはなくなりますが、処理するコードが多すぎるとプログラムの容量が大きくなり、仮想メモリのページ フォールトの回数が増えます。したがって、関数の呼び出しをなくすことにより処理を高速化したとしても、メモリのスワップによってその効果が相殺されます。そのため、最適化を実行する前後にプログラムのパフォーマンスを測定することをお勧めします。アプリケーションの適切な最適化方法に関する一般的なガイドラインについては、「最適化の推奨事項」を参照してください。

optimize プラグマ

最適化の結果、エラーが発生したり処理速度が低下するコード セクションがある場合は、optimize プラグマを使用して該当するセクションの最適化を無効にできます。コードを 2 つのプラグマで囲みます。次に例を示します。

#pragma optimize("", off)
// some code here 
#pragma optimize("", on)

その他のトピック

最適化に関するその他のトピックは以下のとおりです。

DLL メソッドを読み込む時間を短縮する方法の詳細については、MSDN Library の MSDN Magazine 内の「Under the Hood : Optimizing DLL Load Time Performance」を参照してください。

アプリケーション内のページングを最小限に抑える方法の詳細については、MSDN Library の MSDN Magazine 内の「Bugslayer : Improving Runtime Performance with the Smooth Working Set Tool」と「Bugslayer : Improving Runtime Performance with the Smooth Working Set Tool—Part 2」を参照してください。

参照

その他の技術情報

C/C++ ビルドのリファレンス