关于多重循环效率问题



从http://search.csdn.net/Expert/topic/2568/2568192.xml?temp=.0968439搜到的
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。例如示例4-4(b)的效率比示例4-4(a)的高。

for   (row=0;   row <100;   row++)
{
    for   (   col=0;   col <5;   col++   )
  {
      sum   =   sum   +   a[row][col];
  }
}
示例4-4(a)   低效率:长循环在最外层                      
for   (col=0;   col <5;   col++   )
{
    for   (row=0;   row <100;   row++)
  {
        sum   =   sum   +   a[row][col];
    }
}
示例4-4(b)   高效率:长循环在最内层

【建议4-4-2】如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。示例4-4(c)的程序比示例4-4(d)多执行了N-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果N非常大,最好采用示例4-4(d)的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用示例4-4(c)的写法比较好,因为程序更加简洁。

for   (i=0;   i <N;   i++)

{if   (condition)         DoSomething();

else         DoOtherthing();

}

4-4(c)


if   (condition)

{for   (i=0;   i <N;   i++)        

DoSomething();

}

else

{        

for   (i=0;   i <N;   i++)

         DoOtherthing();

}

4-4(d)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值