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: ....
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!