杂记之C语言之循环语句的效率

一、在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,

减少CPU 跨切循环层的次数。例如示例4(b)的效率比

示例
(a)的高。

(a)
for (row=0; row<100; row++)
     {
         for ( col=0; col<5; col++ )
              {
                   sum = sum + a[row][col];
              }
      }

(b)
for (col=0; col<5; col++ )
      {
           for (row=0; row<100; row++)
                {
                     sum = sum + a[row][col];
                }
      }

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

(c)

for (i=0; i<N; i++)
     {
          if (condition)//打断了循环“流水线”作业
             DoSomething();
          else
             DoOtherthing();
}

(d)

if (condition)  //只是程序不简洁
   {
         for (i=0; i<N; i++)
               DoSomething();
   }
else
   {
         for (i=0; i<N; i++)
               DoOtherthing();
}

笔记摘自《高质量C++/C 编程指南》 林锐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值