编译器优化导致性能降低

aJ.*_*aJ. 5 c++ visual-c++-6 compiler-optimization visual-c++

我有一个奇怪的问题.我有以下代码:

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++];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

内循环执行近200,000次,整个功能需要100 ms才能完成.(使用AQTimer进行分析)

double d = 0.0;在外部循环外部找到了一个未使用的变量 并将其删除.在此更改之后,突然该方法花费500毫秒来执行相同数量的操作.(慢5倍).

此行为可在具有不同处理器类型的不同计算机中重现.(Core2,双核处理器).

我正在使用VC6编译器和优化级别O2.Follwing是使用的其他编译器选项:

 -MD -O2 -Z7 -GR -GX -G5 -X -GF -EHa
Run Code Online (Sandbox Code Playgroud)

我怀疑编译器优化并删除了编译器优化/O2.在该功能变得正常并且它作为旧代码花费100ms之后.

谁能对这种奇怪的行为有所了解?

为什么编译器优化会在我删除未使用的变量时降低性能?

注意:汇编代码(更改前后)看起来相同.

And*_*nck 5

如果汇编代码在更改之前和之后看起来相同,则错误会以某种方式与您对函数计时的方式相关联.