>  기사  >  백엔드 개발  >  PHP: 스위치 케이스와 if-else 중 어느 것이 더 효율적인가요?

PHP: 스위치 케이스와 if-else 중 어느 것이 더 효율적인가요?

黄舟
黄舟원래의
2017-06-25 09:54:221794검색

아침에 PHP 프로그램을 작성하고 있었는데, 대용량 데이터를 처리해야 해서 실행 시간을 고려해야 했습니다. 그러다가 각 항목의 무게를 계산할 때 문제가 발생했습니다. switch-case를 사용할지 아니면 if-else를 사용할지 고민 중이었는데, 모두가 if-else보다 switch-case가 더 효율적이라고 하더군요. 특히 많은 양의 데이터와 여러 조건에서 switch-case 비교가 if-else보다 훨씬 더 효율적이라는 것은 이해할 수 있습니다. 판단문은 매우 집중되어 있기 때문에 브랜치의 끊임없는 비교와 판단으로 인해 캐시가 새로 고쳐지지 않습니다. 그러나 if-else의 비교 및 ​​판단 부분은 상대적으로 분산되어 있습니다. 각각의 비교는 매우 먼 곳으로 이동해야 하므로 매번(거의 매번) 캐시를 새로 고쳐야 하므로 당연히 속도가 매우 느려집니다. .

다음은 컴파일 원칙에서 "훔친" 것입니다.

switch(val){ 
case   1:...;break; 
case   2:...;break; 
case   4:...;break; 
case   6:...;break; 
case   7:...;break; 
default:...; 
} 
对应的汇编是 
addr_tab: 
              dd   def_addr 
              dd   addr1 
              dd   addr2 
              dd   def_addr 
              dd   addr4 
              dd   def_addr 
              dd   addr6 
              dd   addr7 
              cmp     val,7 
              ja       def_addr 
              jmp     dword   ptr   [eax*4+addr_tab] 
              addr1: 
                .... 
              addr2: 
                .... 
              addr4: 
                .... 
              addr6: 
                .... 
              addr7: 
                .... 
                def_addr: 
                  ....

스위치는 if에 비해 속도 이점이 있습니다. 하나는 주소를 전송하는 방법을 사용하는 것입니다. list; 스위치는 일반적으로 느슨한 상황에서 "비교-시프트" 방법을 채택하지 않고 dec(sub)-jz 명령 쌍을 사용한다는 사실이 있습니다. 후자는 명령의 길이를 단축할 뿐만 아니라 속도면에서 유리합니다.

프로그램 테스트는 따로 올리지 않겠습니다. 관심 있으신 분들은 직접 테스트해보시길 바랍니다.

위 내용은 PHP: 스위치 케이스와 if-else 중 어느 것이 더 효율적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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