首页 > 代码库 > for循环优化策略

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:这个是在云大大的书中看到的,记录下来以免自己忘记,这种汇编级别的优化策略值得借鉴