Die Schleife ist schneller in C? while-Schleife oder do-while-Schleife
Manche situation, die wir verwenden können während Schleife oder do-while - Schleife austauschbar.
Ein von meinem Freund sagte mir, dass eine solche situation sollten wir nutzen do-while - Schleife.
Weil es schneller ist als während.
Kann mir jemand den Beweis für Sie?
- Hatte nicht wir hatten diese Diskussion: stackoverflow.com/q/3347001/694576 ?
- bitte überprüfen Sie die Website für die Duplikate, die sich vor dem posten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide loops sind so ziemlich das gleiche (außer der Tatsache, dass eine do-while wird mindestens einmal ausgeführt), und in vielen Fällen kompilieren, um die gleichen Anweisungen, die, zumindest auf x86.
Folgenden code:
Generiert diese Montage (mit
gcc -S -o temp.as temp.c
):Du vergleichst äpfel und Pfirsiche.
Einen
do-while
undwhile
loops sind unterschiedlich, was die Funktionalität, die Sie bieten.do-while
immer exectures einmalwhile
nur ausgeführt wird, wenn Bedingung wahr ist.In Situationen, In denen Sie verwenden können, entweder gibt es keine performance-Unterschied.
Und wenn Sie nicht sicher sind, dann Profilerstellung es selbst auf Ihrer Plattform oder die Analyse der assembly output der beiden ist, was Sie tun sollten.
Nicht. Der C-standard keine Vorgaben für die Ausführungsgeschwindigkeit, so ist es unmöglich zu beweisen, im Allgemeinen.
Den Unterschied zwischen while und do-while ist, dass die do-while wird immer das erste mal, ohne zu prüfen, den Zustand. So vorausgesetzt, dass die Bedingung ist tatsächlich wahr das erste mal, do-while speichert diese eine Prüfung der Bedingung.
Dies ist eine Mikro-Optimierung am besten.
Wenn Sie dont care über die unterschiedlichen semantischen (mindestens einmal gegen vielleicht keine), gibt es keinen Unterschied.
C semantischen beschreibt das Verhalten einer abstrakten Maschine, in dem Fragen der Optimierung sind irrelevant. (siehe C99-Standard, 5.1.2.3p1)
Wenn es eine situation, wo der compiler kann optimieren Sie es gut, bleiben Sie bei der
while
Schleife. Top-of-loop-Tests ist klarer. Der Grund ist verwurzelt in der formalen Verifikation. Diewhile
- loop-tests die Voraussetzungen für die korrekte Ausführung der Körper. Diedo
Schleife ein Körper einmal ohne testen alles, und dann hat sich mit der Zeit nach, so zu sprechen. Es ist schwierig zu Grunde geht. Wir müssen darüber nachdenken, wie die situation ist als Folge der Bedingungen, die bestanden, bevor die Schleife plus der Wirkung der unbewachten Ausführung der ersten iteration.Wenn Sie eine loop-guard, das ist teuer (wie ein Anruf zu einer externen Funktion, die das tun können I/O oder wer weiß was sonst noch), dann denke über das verschieben Sie es nach unten, wenn möglich.