在我下面的代码中。我使用了一个计时高分辨率的计时器来测量循环的完成时间。这个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值的代码行。
发布于 2014-04-19 18:02:10
我要冒昧地猜一猜,当你
buffer[ Bcount]=500;在for循环中,编译器能够优化循环中不必要的部分。它被简化为:
for( counter1=0; counter1< sizeof(chunk1); ++counter1)
{
++Bcount;
buffer[ Bcount]=500;
++counter1;
} 发布于 2014-04-19 18:01:12
答案很简单,您的修改将循环缩减为(不考虑未定义的行为):
for( counter1=0; counter1< sizeof(chunk1); counter1 += 2)
Buffer[++Bcount] = 500;
NextStateChunk1 = ... complicated expression ...编译器很有可能进一步压缩这些变量,这取决于之前/以后如何设置/使用这些变量。
https://stackoverflow.com/questions/23173466
复制相似问题