首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >减少for循环的时间

减少for循环的时间
EN

Stack Overflow用户
提问于 2014-04-19 17:52:56
回答 2查看 616关注 0票数 1

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

代码语言:javascript
运行
复制
 buffer[ Bcount]=NextState_chunk1;

但是如果我用

代码语言:javascript
运行
复制
buffer[ Bcount]=500;

时间减少到很大的程度

完整代码:

代码语言:javascript
运行
复制
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值的代码行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-19 18:02:10

我要冒昧地猜一猜,当你

代码语言:javascript
运行
复制
buffer[ Bcount]=500;

在for循环中,编译器能够优化循环中不必要的部分。它被简化为:

代码语言:javascript
运行
复制
for( counter1=0; counter1< sizeof(chunk1); ++counter1)
{
    ++Bcount;
    buffer[ Bcount]=500;
    ++counter1;
}  
票数 4
EN

Stack Overflow用户

发布于 2014-04-19 18:01:12

答案很简单,您的修改将循环缩减为(不考虑未定义的行为):

代码语言:javascript
运行
复制
for( counter1=0; counter1< sizeof(chunk1); counter1 += 2)
    Buffer[++Bcount] = 500;
NextStateChunk1 = ... complicated expression ...

编译器很有可能进一步压缩这些变量,这取决于之前/以后如何设置/使用这些变量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23173466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档