关于多重循环效率问题

来源:互联网 发布:华为mate10 知乎 编辑:程序博客网 时间:2024/06/17 20:46


从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)

0 0
原创粉丝点击