在我的代码中。我使用计时高分辨率计时器来测量 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的值。
答案 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 ...
由于先前/进一步设置/使用变量的方式,编译器很可能会进一步压缩它。