C++ 的for循环问题

HjLZhyp 2013-11-09 11:30:00
程序1:
for (i=0; i<n; i++)
{
A;
B;
C;
}

程序2:
for(i=0; i<n; i++)
{
A;
}
for(i=0; i<n; i++)
{
B;
}
for(i=0; i<n; i++)
{
C;
}

问题:
什么情况下程序一运行更快?
什么情况下程序二运行更快?





...全文
451 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-11-15
  • 打赏
  • 举报
回复
从计量角度考虑,第一个循环变量,只进行一次循环改变。 从实际角度考虑,就有许多因素了。 比如,X86 汇编语言,可以loop指令,而 A,B,C 指令长度都比较大的话,就不能使用 loop指令了。 那么 分开的循环,可能要快。 如果使用跳转指令,实现循环,那么短跳转指令实现的比较快。 循环内部的代码少,执行的就快。 多了以后,只能用长跳转,执行的就慢了。 其他,还包括虚拟内存的影响,cache 的影响,包括磁盘 cache的影响。 有些因素会相对加快,某些代码的效率, 有些因素会模糊,代码的效率差异,所以这个真的不好说。 真想知道的比较清楚的话。 找些资料(CPU,汇编,操作系统,C,C++,编译原理等等) 然后自己做些试验,耐心研究一番,可能就知道了。
lunat 2013-11-09
  • 打赏
  • 举报
回复
从编译器循环展开优化和并行执行等方面,需要视指令依赖性、指令功能具体分析。
simonhehe 2013-11-09
  • 打赏
  • 举报
回复
第一种 做同样的事情, 减少初始化赋值和遍历效率会更高
worldy 2013-11-09
  • 打赏
  • 举报
回复
差别很微小,但按照你程序逻辑,第一个肯定更快,我的断言是不可能例外,即使n是负数,即循环体都不会被执行,那么前者做一次判断,后者要做三次判断
max_min_ 2013-11-09
  • 打赏
  • 举报
回复
这样 A,B,C的具体内容啥啥呢?都不清楚呢? 看具体情况吧! 一般情况考虑简单的代码复用肯定是第一种了,但是扯到效率问题,就不能这么简单的来说1 ps:次题目之前已经有帖子讨论过了!
worldy 2013-11-09
  • 打赏
  • 举报
回复
想起来了,由于现在CPU都使用catch,因此从cath命中率的角度,在ABC都是长代码的时候,第二种效率会更高,..............谁知道呢

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧