使用自增自减运算提高效率
在使用到加一和减一操作时尽量使用增量和减量操作符,因为增量符语句比赋值语句更快,原因在于对大多数CPU来说,对内存字的增、减量操作不必明显地使用取内存和写内存的指令,比如下面这条语句:
x=x+1;
在大多数微机汇编语言为例,产生的代码类似于:
move A,x ;把x从内存取出存入累加器A
add A,1 ;累加器A加1
store x ;把新值存回x
而如果使用增量操作符,则会有相对应的指令支持,生成的代码如下:
incr x ;x加1
显然,不用取指令和存指令,增、减量操作执行的速度加快,同时长度也缩短了。
同样的,复合赋值表达式 ( 如 a -= 1 及 a += 1 等 ) 都能够生成高质量的程序代码。
提取公共表达式
在某些情况下,C编译器不能从浮点表达式中提出公共的子表达式,因为这意味着相当于对表达式重新排序。
然而编译器在提取公共子表达式前不能按照代数的等价关系重新安排表达式。这时,程序员需要手动地提出公共的子表达式。
不好的代码:
float a, b, c, d, e, f;
...
e = b * c / d;
f = b / d * a;
推荐的代码:
float a, b, c, d, e, f;
...
const float t = (b / d);
e = c * t;
f = a * t;
另一个例子,不好的代码:
float a, b, c, e, f;
...
e = a / c;
f = b / c;
推荐的代码:
float a, b, c, e, f;
。。。
const float t = (1.0f / c);
e = a * t;
f = b * t;
全部0条评论
快来发表一下你的评论吧 !