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