for循环优化策略

double getSumNumber(){
       double list[100] = {0};
       double sum = 0;
       for(int i = 0; i < 100; ++i){
          sum += list[i];
       }
     return sum;
}

double getSumNum(){
       double list[100] = {0};
      double sum1 = 0, sum2 = 0;
     for(int i = 0; i < 100; i += 2){
       sum1 += list[i];
       sum2 += list[i + 1];
    }
   return sum1 + sum2;
}

尽管代码返回的都是0;可是体现一种优化的策略。

  24:  for(int i = 0; i < 100; ++i){
01296D7E  mov         dword ptr [i],0 
01296D88  jmp         getSumNumber+69h (1296D99h) 
01296D8A  mov         eax,dword ptr [i] 
01296D90  add         eax,1 
01296D93  mov         dword ptr [i],eax 
01296D99  cmp         dword ptr [i],64h 
01296DA0  jge         getSumNumber+8Dh (1296DBDh)

上面是汇编编码。

每次for循环都会有一个推断 cmp 指令。函数1会有推断100次,而函数2仅仅会推断50次。

这样代码就降低了判定次数。

算是用空间换时间吧。

PS:这个是在云大大的书中看到的,记录下来以免自己忘记,这样的汇编级别的优化策略值得借鉴

posted @ 2017-06-01 17:39  jzdwajue  阅读(176)  评论(0编辑  收藏  举报