wob
führt die Verwendung von (1) statt für (;;) zu einem Leistungsunterschied in Infinite führt Loops?Antwort:
In den meisten modernen Compilern gibt es keinen Leistungsunterschied zwischen (1) und für (;;).
Erläuterung:
Hier finden Sie eine technische Analyse, wie diese Schleifen in implementiert werden in Compiler:
perl:
sowohl while während (1) als auch für (;;) führen zu denselben Opcodes, wie die Perl -mo = Concise -Ausgabe demonstriert:
a verlassen [1 Ref] vkp/refc -> (Ende) 1 ENTER -> 2 2 NextState (Haupt 2 -e: 1) v -> 3 9 Leveloop 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 drucken vk -> 8 5 Pushmark s -> 6 6 const [PV "foo \ n"] s -> 7 8 Unstack V -> 4 -e syntax ok
gcc:
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
In GCC kompilieren beide Schleifen mit demselben Assembly -Code, wie unten gezeigt: . Globl t_won t_ und thefhe: .L2: movl $ .lc0, �i Rufen Sie an JMP .L2 .Globl t_for t_for: .L5: movl $ .lc0, �i Rufen Sie an JMP .l5
In den meisten Fällen müssen daher in den meisten Fällen keine Aufgrund der Leistungsbedenken vorziehen. Die Auswahl kann auf Code -Lesbarkeit oder anderen Faktoren basieren.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3