Last Updated 2005/06/06
Programming Tips Visual C++  索 引 
デバッグとリリースのコンパイルの違い
2005/06/06

コンパイルはデバッグとリリースが存在する.
プロジェクトの標準設定では,
デバッグモード -Od
リリースモード -O2
となっている.

これは,デバッグモードでは最適化しないで,リリースモードでは速度優先の最適化となる.

速度優先の最適化は,サイズ優先の最適化に比べて以下の点が違う.
・関数の入り口アドレスが align される
・定数乗算をシフトにする(シフトした方が良い場合)
・インライン関数を展開する

最適化は適度に行うべきである.過剰に最適化してしまうと動作しないプログラムとなる可能性もある.


VC++ Ver1 の時に以下のコードは最適化により正しく動かない.

class A {
public:
    A();
    char Dmy;
};

A *Foo(int num)
{
    return new A[num];
}

/O1 と /O2 のオプションでは正しく動かない.(/O なら大丈夫)
(ちなみに VC++ Ver4 では修正されている)


参照
リリースビルドで落ちる(引数不正)
前後のTips
デバッグとリリースのコンパイルの違い

DSS ProgrammingTipsCGI Ver2.02