Maison > Article > développement back-end > \"while (1) vs for (;;) : l'optimisation du compilateur élimine-t-elle les différences de performances ?\"
pendant (1) vs. pour (;;) : y a-t-il une différence de vitesse ?
Question :
L'utilisation de while (1) au lieu de for (;;) entraîne-t-elle une différence de performances dans les boucles infinies ?
Réponse :
Dans la plupart compilateurs modernes, il n'y a pas de différence de performances entre while (1) et for (;;).
Explication :
Voici une analyse technique de la façon dont ces boucles sont implémentées dans les compilateurs :
Perl :
while (1) et for (;;) donnent les mêmes opcodes, comme le démontre la sortie perl -MO=Concise :
<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 :
Dans GCC, les deux boucles se compilent dans le même code assembleur, comme indiqué ci-dessous :
<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>
Par conséquent , dans la plupart des cas, il n’est pas nécessaire de préférer l’un à l’autre pour des raisons de performances. Le choix peut être basé sur la lisibilité du code ou d'autres facteurs.
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!