性能提高的几个细节(转)

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:51   2340   0

适合初中级朋友

(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;

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP