PHP : Lequel est le plus efficace, switch-case ou if-else ?

黄舟
Libérer: 2023-03-11 11:22:02
original
1837 Les gens l'ont consulté

J'écrivais un programme PHP le matin Parce qu'il devait traiter une grande quantité de données, j'ai dû tenir compte du temps d'exécution. Ensuite, j'ai rencontré un problème lors du calcul du poids de chaque article. Je me demandais si je devais utiliser switch-case ou if-else. J'ai regardé en ligne et tout le monde a dit The switch-case. l'efficacité est beaucoup plus élevée que if-else. J'ai écrit quelques programmes et je l'ai testé, surtout dans des conditions multiples, switch-case est beaucoup plus efficace que if-else. -case est beaucoup plus efficace que if-else. Cela est également compréhensible, car les déclarations de jugement de switch-case sont très concentrées, de sorte que le cache ne sera pas actualisé en raison. à des branches constantes de comparaison et de jugement. Cependant, la partie comparaison et jugement de if-else est relativement dispersée. Chaque comparaison doit aller à un endroit très éloigné, le cache doit donc être actualisé à chaque fois (presque à chaque fois), ce qui rend naturellement la vitesse très lente. .

Ce qui suit est quelque chose de "volé" au principe de compilation :

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: 
                  ....
Copier après la connexion

Switch a un avantage en termes de vitesse par rapport à if. L'une consiste à utiliser la méthode de transfert de la liste d'adresses, l'autre est que le commutateur ne fonctionne généralement pas bien ; dans des situations lâches. Au lieu d'utiliser la méthode "comparer-shift", utilisez la paire d'instructions dec(sub)-jz. Cette dernière raccourcit non seulement la longueur de l'instruction, mais présente également un avantage en termes de vitesse.

Je ne publierai pas le test du programme. Ceux qui sont intéressés devraient le tester eux-mêmes. OK, j'ai décidé d'utiliser switch-case !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal