部分摘自《代码大全》
1.让运行最快和较大概率为真多判断首先被执行
适用于if/else和case语句
2.用查询表代替复杂的表达式
如果有复杂的输入,先将结果计算好放在一张表里
3.避免在循环中重复判断,
4.设置哨兵值
bool found = false;
i = 0;
while(!found && i < cnt)
{
if (item[i++] == value)
{
found = true;
break;
}
}
// 优化后
item[cnt] = value;
while( item[i] != value)
{
i++;
}
if(i < cnt) found = true;
5.循环展开
nt amount = 0;
for(int i = 0; i < len; i++)
{
amount += a[i];
}
// 优化后
int i = 0;
while(i < len - 3) //注意不能超过len,最后len%4个要处理
{
amount += (a[i + a[i + 1] + a[i + 2] + a[i + 3] ) ;
// amount += a[i + 1]; 依赖上一条语句的执行结果,只能顺序执行,不能利用cpu的并行计算
i += 4;
}
while(i < len)
{
amount += a[i];
i++;
}
6.profile driven optimize
举个例子:
a = b * 50;
如果b大部分情况都等于10,可以优化如下:
a = 50;
if (b != 10)
{
a = b * 10;
}