"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > \ "tandis que (1) vs pour (;;): L'optimisation du compilateur élimine-t-elle les différences de performances? \"

\ "tandis que (1) vs pour (;;): L'optimisation du compilateur élimine-t-elle les différences de performances? \"

Publié le 2025-02-28
Parcourir:885

  \

while (1) vs pour (;;): y a-t-il une différence de vitesse?

Question:

LOOPS?

Réponse:

Dans la plupart des compilateurs modernes, il n'y a pas de différence de performance entre While (1) et pour (;;).

Compilements:

perl:

à la fois while (1) et pour (;;) se traduisent par les mêmes opcodes, comme démontré par le perl -mo = sortie concise:

a wabre [1 ref] vkp / Refc -> (end) 1 Entrez -> 2 2 NextState (Main 2 -e: 1) V -> 3 9 Leaveveop VK / 2 -> A 3 enterloop (next-> 8 Last-> 9 red-> 4) v -> 4 - LinEseq VK -> 9 4 NextState (Main 1 -e: 1) V -> 5 7 imprimer VK -> 8 5 pushmark s -> 6 6 const [pv "foo \ n"] s -> 7 8 Débrouiller V -> 4 -e syntaxe ok

a   leave[1 ref] vKP/REFC ->(end)
1      enter ->2
2      nextstate(main 2 -e:1) v ->3
9      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               pushmark s ->6
6               const[PV "foo\n"] s ->7
8            unstack v ->4
-e syntax OK

dans gcc, les deux boucles compilent le même code d'assembly, comme illustré ci-dessous:

. t_ pendant que: .L2: movl $ .lc0, �i appel d'appel jmp .l2 .globl t_for t_for: .L5: movl $ .lc0, �i appel d'appel JMP .l5

 Par conséquent, dans la plupart des cas, il n'est pas nécessaire d'en préférer l'un à l'autre en fonction des problèmes de performance. Le choix peut être basé sur la lisibilité du code ou d'autres facteurs. 
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3