如何去优化程序性能:
1.通过优化编译器
可以通过用带命令选项“-Og”调用gcc来编译程序,也可以选项“-O1”或者更高的“-O2”“-O3”调用gcc让程序更大量的优化。
2.优化程序代码
程序的优化可以从三个方面考虑:
- 循环次数越小越好
- 减少过程调用, 迭代的计算次数越少越好
- 减少对储存单元的读取
利用局限性对程序进行优化
良好的计算机程序更倾向于引用最近引用过的数据或数据项。
局限性的简单原则
- 重复引用相同变量的程序,具有良好的时间局限性
- 步长越小,空间局限性越好
- 循环体越小,循环迭代次数越多,局限性越好
举一个例子
下面三段代码的比较:
for(i=0;i<n;i++){
for(j=0;j<n;j++){
p[i].v[j]=0;
for(j=0;j<n;j++)
p[i].a[j]=0;
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++)
for(i=0;i<n;i++){
p[i].v[j]=0;
p[i].a[j]=0;
}
}
for(j=0;j<n;j++){
for(i=0;i<n;i++)
p[i].v[j]=0;
for(i=0;i<n;i++)
p[i].a[j]=0;
}
上面三个代码:
代码1,以步长为1的引用模式访问数组,明显具有很好的空间局限性。
代码2,步长不为1,跳转为0,12,4,16,8,20,代码2的空间局限性比代码1的差。
代码3,不仅在每个结构中跳来跳去,而且还在结构与结构之间跳跃,代码3是最差的。