奇妙な問題が 1 つあります。次のコードがあります。
template<clss index, class policy>
inline int CBase<index,policy>::func(const A& test_in, int* srcPtr ,int* dstPtr)
{
    int width = test_in.width();
    int height = test_in.height();
    double d = 0.0; //here is the problem
    for(int y = 0; y < height; y++)
    {
        //Pointer initializations
        //multiplication involving y
        //ex: int z = someBigNumber*y + someOtherBigNumber;
        for(int x = 0; x < width; x++)
        {
            //multiplication involving x
        //ex: int z = someBigNumber*x + someOtherBigNumber;
            if(soemCondition)
            {
                // floating point calculations
            }
            *dstPtr++ = array[*srcPtr++];
        }
    }
}
内側のループは約 200,000 回実行され、関数全体が完了するまでに 100 ミリ秒かかります。(AQTimer を使用してプロファイリング)
double d = 0.0;外側のループの外側で未使用の変数を見つけ、  それを削除しました。この変更後、突然、同じ回数の実行でメソッドが 500 ミリ秒かかるようになりました。(5倍遅い)。
この動作は、異なるプロセッサ タイプの異なるマシンで再現可能です。(Core2、デュアルコア プロセッサ)。
最適化レベル の VC6 コンパイラを使用していますO2。使用されるその他のコンパイラ オプションは次のとおりです。
 -MD -O2 -Z7 -GR -GX -G5 -X -GF -EHa
コンパイラの最適化を疑い、コンパイラの最適化を削除しました/O2。その後、関数が正常になり、古いコードとして 100ms かかっています。
誰かがこの奇妙な振る舞いに光を当てることができますか?
未使用の変数を削除すると、コンパイラの最適化によりパフォーマンスが低下するのはなぜですか?
注: アセンブリ コード (変更前と変更後) は同じように見えました。