C++ Optimization Skills
Little Skills
注意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)也能类似方法优化
for循环判断条件里别用赋值语句
for(i = 0; i < (max – 1); i++) { 优化为: int end = max -1; for(i = 0; i < end; i++) {}
能在循环外作的尽量在循环外做
看下面例子: for() { a += (b + (c/2)); } 可以把赋值放在循环体外,优化为: tmp = c/2; for() { a += (b + tmp); }
对递归或知道指定结果的,可直接指定常数返回
这个不好理解点,先看个例子: 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; }
Last modified: 四 1 16 11:44:51 2014