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