for循环次数不同,编译器生成的代码就不同,为何?
我用VC10写了几行小程序,编译release版
int main(void){ int i=0; for(int c=0;c<11;++c){//循环11次,因为10次以下循环本身会被优化掉。 i+=c; } printf("%d\n",i); return 0;}
for(int c=0;c<11;++c){0040101E cmp eax,0Bh 00401021 jge main+25h (401025h) i+=c;00401023 mov esi,eax 00401025 add ecx,edx 00401027 add ecx,esi }
for(int c=0;c<12;++c){00401004 xor eax,eax 00401006 xor esi,esi 00401008 xor edx,edx 0040100A xor ecx,ecx 0040100C lea esp,[esp] i+=c;00401010 add edi,eax 00401012 lea ecx,[ecx+eax+1] 00401016 lea edx,[edx+eax+2] 0040101A lea esi,[esi+eax+3] 0040101E add eax,4 00401021 cmp eax,0Ch 00401024 jl main+10h (401010h) }
for(int c=0;c<15;++c){00401003 xor eax,eax 00401005 xor edx,edx 00401007 xor ecx,ecx 00401009 lea esp,[esp] i+=c;00401010 add esi,eax 00401012 lea ecx,[ecx+eax+1] 00401016 lea edx,[edx+eax+2] 0040101A add eax,3 0040101D cmp eax,0Fh 00401020 jl main+10h (401010h) }