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