直接上結論: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(;;);”語句,只需要一條彙編指令。