Maison  >  Article  >  développement back-end  >  \"while (1) vs for (;;) : l'optimisation du compilateur élimine-t-elle les différences de performances ?\"

\"while (1) vs for (;;) : l'optimisation du compilateur élimine-t-elle les différences de performances ?\"

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 22:18:29133parcourir

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!

Déclaration:
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