代码优化

来源:互联网 发布:java求1到100的乘积 编辑:程序博客网 时间:2024/06/11 14:03
  1. 在程序执行过程中,加减法操作是计算机最喜欢的操作,其执行时间只占用1个时钟周期,是最快的操作,位运算和移位操作的执行速度和加减法接近。乘法的执行时间要长一些,大概在5个时钟至6个时钟周期内完成.除法的执行速度最慢,大约需要50个时钟周期才能完成一个除法操作,所以移位操作是一个很好的选择,数据左移一位相当于乘以2,右移一位相当于除以2,使用移位操作可以将整数的乘除转换为对整数的移位操作,从而提高速度。
  2. 常量折叠
    例如:
    int a=10;
    a=a+2*17+6; 和 int a a=a+40;这两种形式,第一种需要进行2次加法和1次乘法,第二种只需做一次加法,速度肯定是提高了不小.

3.使用数学公式:
for(i=1;i<=n;i++) sum+=i; 和 sum=((1+n)*n)/2; 前者要执行n次,后者只需执行一个数学公式。
4.存储问题:
例如: 语句1: x=x+1; 语句2: x+=1;
语句1在执行过程中编译器会认为赋值符号”=”两边的操作数不是一个操作数,而是两个,尽管用户知道这两个变量实际上是一个,这时该语句的执行过程分为3部,分别是 寻找存储左边操作数x的内存单元的地址;寻找存储右边操作数x的内存单元地址;
计算x+1的数值并且存储在变量x中.

语句2:该语句在执行过程中编译器会认为赋值符号”=” 两边的操作数是同一个操作数,所以该语句的执行过程分为两步,分别是:寻找存储操作x的内存单元的地址;计算x+1的数值并且存储到x中。

5.分支优化:
把先要判断的条件放在第一位置,if….else 和 switch 语句的区别,if…else 需要比较多次才能实现跳转,而switch 则不要比较那么多次.

6.循环优化:
在循环中有些计算是多次不变的,这种计算称为一次性计算. 由于一次性计算在循环执行期间不改变计算的结果,这时在循环外计算该表达式和在循环内执行的效果是一样的。因此对于这种循环中的一次性计算应当将其放置到循环外.

如果有哪位大神有好的优化方法,请指教了

0 0