C语言常规优化策略
3 循环优化
提高程序效率的核心是对影响代码执行速度的关键程序段进行优化。在任何程序中,最影响代码速度的
往往是循环语句,特别是多层嵌套的循环语句。因此,掌握循环优化的各种实用技术是提高程序效率的
利器,也是一个高水平程序必须具备的基本功。
本节有关各种循环优化技术的讨论基本上以下面的一个程序段为对象,程序的涵义为:对于两个给定的
数组a、b,计算a[8]b[8]+a[12]b[12]+...+a[84]b[84]的值。原始的代码为:
// 版本0
prod=0;
i=1;
while (i<=20)
{
x=*(a+4*i+4);
y=*(b+4*i+4);
z=x*y;
prod+=z;
i++;
}
常用的循环优化技术包括代码外提、删除冗余运算、强度削弱、变换循环控制条件、合并已知量以及删
除无用赋值等。下面我们围绕这一例子来介绍这些内容。
3.1 代码外提
代码外提是指将循环体中与循环变量无关的运算提出,并将其放到循环之外,以避免每次循环过程中的
重复操作。
在原始代码中,计算x、y的值时,重复使用到a+4, b+4操作,由于它们与循环变量i无关,可以放到循环
之外一次执行完成:
// 版本1
prod=0;
i=1;
a1=a+4;
b1=b+4;
while (i<=20)
{
x=*(a1+4*i);
y=*(b1+4*i);
z=x*y;
prod+=z;
i++;
}
3.2 删除冗余运算
在版本1中,循环体内执行了两次4*i的操作,通过引入中间变量保留这一结果,可以删除冗余计算。
// 版本2
pro