コードの最適化

実行可能ファイルを最適化することで、実行の高速化とコード サイズの縮小の間でバランスを取ることができます。 このトピックでは、コードを最適化するために Visual Studio に用意されているいくつかのメカニズムについて説明します。

言語機能

次のトピックでは、C/C++ 言語のいくつかの最適化機能について説明します。

最適化に影響するプラグマおよびキーワード
パフォーマンスを向上させるためにコードで使用できるキーワードとプラグマの一覧。

カテゴリ別のコンパイラ オプション
実行速度またはコード サイズに特に影響を与える /O コンパイラ オプションの一覧。

右辺値参照宣言子: &&
右辺値参照では、移動セマンティクスの実装がサポートされます。 移動セマンティクスを使用してテンプレート ライブラリを実装すると、これらのテンプレートを使用するアプリケーションのパフォーマンスが大幅に向上する可能性があります。

optimize プラグマ

コードの最適化されたセクションによってエラーまたは遅延が発生する場合は、optimize プラグマを使用して、そのセクションの最適化をオフにすることができます。

次に示すように、2 つのプラグマでコードを囲みます。

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

プログラミング プラクティス

最適化を使用してコードをコンパイルしたときに、追加の警告メッセージが表示されることがあります。 いくつかの警告は最適化されたコードのみに関係しているため、これは想定されている動作です。 これらの警告に従うと、多くの最適化の問題を回避できます。

逆説的ですが、プログラムの速度を最適化すると、コードの実行速度が低下する可能性があります。 これは、速度の最適化の中には、コード サイズを増加させるものがあるためです。 たとえば、関数のインライン化によって、関数呼び出しのオーバーヘッドが除外されます。 ただし、多数のコードをインライン化するとプログラムが大きくなり、仮想メモリのページ フォールトの数が増加する可能性があります。 そのため、関数呼び出しの除外によって得られる速度が、メモリ スワップによって失われる可能性があります。

次のトピックでは、適切なプログラミング ラクティスについて説明します。

タイムクリティカルなコードを高速化するためのヒント
コーディング技法が優れていると、パフォーマンスが向上します。 このトピックでは、タイムクリティカルなコード部分が問題なく実行されるようにするためのコーディング技法について説明します。

最適化のベスト プラクティス
アプリケーションを最適化するための最善の方法に関する一般的なガイドラインを示します。

最適化されたコードのデバッグ

コンパイラによって作成されたコードが最適化によって変更される可能性があるため、アプリケーションをデバッグし、パフォーマンスを測定した後、コードを最適化することをお勧めします。

以下のトピックでは、リリース ビルドのデバッグに関する情報を提供します。

以下のトピックでは、コードのビルド、読み込み、および実行を最適化する方法についての情報を提供します。

このセクションの内容

最適化に影響するプラグマおよびキーワード
コンパイラのスループットの向上
浮動小数点数の精度の低下
IEEE 浮動小数点表現
タイムクリティカルなコードを高速化するためのヒント
"()" のない関数名とコードの生成
最適化のベスト プラクティス
プロファイルに基づく最適化
プロファイルに基づく最適化の環境変数
PgoAutoSweep
pgomgr
pgosweep
方法: 複数の PGO プロファイルを単一のプロファイルにマージする

関連項目

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