减少for循环的时间

时间:2014-04-19 17:52:57

标签: c++

在我的代码中。我使用计时高分辨率计时器来测量 for loop 的完成时间。这个for循环是我的程序的一个重要部分,我正在尝试优化它。我注意到的是下面的代码行导致时间增加

 buffer[ Bcount]=NextState_chunk1;

如果我用

替换这一行
buffer[ Bcount]=500;

时间减少到很高的水平

完整代码:

int NextState_chunk1=0;

for( counter1=0; counter1< sizeof(chunk1); ++counter1)
{

    IndexEntries &data=IndexTable[chunk1[counter1]][chunk1[counter1+1]];
    DoubleTableEntries &GetValue=NewDoubleTable[NextState_chunk1][data.index]; 
    NextState_chunk1= GetValue.Next_State;
    ++Bcount;
    buffer[ Bcount]=NextState_chunk1;
    ++counter1;
}  

请指出为什么会发生这种情况,我该如何避免这个问题?

注意:我刚刚替换了第二行代码。我没有删除代码行来测量next_state_chunk1的值。

2 个答案:

答案 0 :(得分:4)

当你有

时,我会冒险猜测
buffer[ Bcount]=500;
在for循环中,编译器能够优化循环中不必要的部分。它被简化为:

for( counter1=0; counter1< sizeof(chunk1); ++counter1)
{
    ++Bcount;
    buffer[ Bcount]=500;
    ++counter1;
}  

答案 1 :(得分:3)

答案很简单,你的修改会减少你的循环(忽略未定义的行为):

for( counter1=0; counter1< sizeof(chunk1); counter1 += 2)
    Buffer[++Bcount] = 500;
NextStateChunk1 = ... complicated expression ...

由于先前/进一步设置/使用变量的方式,编译器很可能会进一步压缩它。