while(1)和for(;;)的區別-彙編對比

直接上結論:for(;;)的效率高於while(1)。

證明如下:

C源代碼:

void main(void){
    while(1);
    for(;;);
}

 對應的彙編代碼:

---void main(void) {
00D616F0  push        ebp  
00D616F1  mov         ebp,esp  
00D616F3  sub         esp,0C0h  
00D616F9  push        ebx  
00D616FA  push        esi  
00D616FB  push        edi  
00D616FC  lea         edi,[ebp-0C0h]  
00D61702  mov         ecx,30h  
00D61707  mov         eax,0CCCCCCCCh  
00D6170C  rep stos    dword ptr es:[edi]  
00D6170E  mov         ecx,offset _28BAC0EC_mian@cpp (0D6B000h)  
00D61713  call        @__CheckForDebuggerJustMyCode@4 (0D61203h)  
---while (1);
00D61718  mov         eax,1  
00D6171D  test        eax,eax  
00D6171F  je          main+33h (0D61723h)  
00D61721  jmp         main+28h (0D61718h)  
---for (;;);
00D61723  jmp         main+33h (0D61723h)  
}

彙編代碼解析:

可以看到,“while(1);”語句,需要4條彙編指令:立即數、與操作、比較、跳轉;

而“for(;;);”語句,只需要一條彙編指令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章