>  기사  >  백엔드 개발  >  \"while(1) 대 for(;;): 컴파일러 최적화로 성능 차이가 제거됩니까?\"

\"while(1) 대 for(;;): 컴파일러 최적화로 성능 차이가 제거됩니까?\"

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 22:18:29133검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.