while(1)과 for(;;): 속도 차이가 있나요?
질문:
for(;;) 대신 while(1)을 사용하면 무한 루프에서 성능 차이가 발생합니까?
답변:
대부분의 경우 최신 컴파일러에서는 while(1)과 for(;;) 사이에 성능 차이가 없습니다.
설명:
다음은 이러한 루프가 구현되는 방법에 대한 기술적 분석입니다. 컴파일러에서:
Perl:
perl -MO=Concise 출력에서 볼 수 있듯이 while(1)과 for(;;) 모두 동일한 opcode가 생성됩니다. :
<code class="shell">a <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 2 -e:1) v ->3 9 <2> leaveloop vK/2 ->a 3 <{> enterloop(next->8 last->9 redo->4) v ->4 - <@> lineseq vK ->9 4 <;> nextstate(main 1 -e:1) v ->5 7 <@> print vK ->8 5 <0> pushmark s ->6 6 <$> const[PV "foo\n"] s ->7 8 <0> unstack v ->4 -e syntax OK</code>
GCC:
GCC에서 두 루프는 아래와 같이 동일한 어셈블리 코드로 컴파일됩니다.
<code class="assembly">.globl t_while t_while: .L2: movl $.LC0, %edi call puts jmp .L2 .globl t_for t_for: .L5: movl $.LC0, %edi call puts jmp .L5</code>
따라서 , 대부분의 경우 성능 문제를 기준으로 둘 중 하나를 선호할 필요는 없습니다. 코드 가독성이나 기타 요인에 따라 선택할 수 있습니다.
위 내용은 \'while(1) 대 for(;;): 컴파일러 최적화로 성능 차이가 제거됩니까?\'의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!