Maison > développement back-end > C++ > \'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
Libérer: 2024-10-31 22:18:29
original
247 Les gens l'ont consulté

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal