适合初中级朋友
(1) 注意CPU的0寄存器
CPU里有个用于存放0的寄存器
在做比较时if,和0比较的话,在汇编上会比0以外的值少一条汇编指令
在循环里用到就能提高效率
int end = max -1;
for(i = 0; i < end; i++) {
}
优化为:
int end = max -1;
for(i = end; i > 0; i--) {
}
同理while(i<end)也能类似方法优化
(2) for循环判断条件里别用赋值语句
for(i = 0; i < (max – 1); i++) {
}
优化为:
int end = max -1;
for(i = 0; i < end; i++) {
}
(3) 能在循环外作的尽量在循环外做
看下面例子:
for() {
a += (b + (c/2));
}
可以把赋值放在循环体外,优化为:
tmp = c/2;
for() {
a += (b + tmp);
}
(4) 对递归或知道指定结果的,可直接指定常数返回
这个不好理解点,先看个例子:
int recursive (int n) {
if (!n) {
/* if n==0 return 1 directly */
return 1;
}
/*递归*/
unsigned long tmp = 1;
for (unsigned long i = 1; i <= n; tmp *= i++)
;
return tmp;
}
比如,我实际调用recursive (int n)时,用调试工具跟踪得知,
调用递归(int n)时,输入参数n值很大几率(80%)为0,1,2,3这几个值,
这样的情况,就可以做如下优化:
int recursive(int n) {
unsigned long tmp = 1;
switch(n) {
case 0:
case 1:
break;
case 2:
tmp = 2;
break;
case 3:
tmp = 6;
break;
default :
{
/*递归*/
for (unsigned long i = 1; i <= n; tmp *= i++)
;
return tmp;
}
}
return tmp;
}
|