Vergleich der Schleifen
-
Hi,
Welche Schleife ist eigentlich die Schnellste?for(;;) {}
while(1) {}
do {} while()
-
äquivalent ? die unterscheiden sich doch nur bei dem zeitpunkt der überprüfung ob die schleife weitermachen soll oder nicht
-
Sie haben aber auch unterschiedliche Parameter.
Außerdem, wie du gerade schon gesagt hast, sind sie anders geschrieben worden, dass weist dann auch wieder auf einen Unterschied hin.
-
ich würde sagen, diese 3 sind genauso schnell, weil der Compiler sie optimiert und im Prinzip auf while(1){} umwandelt oder so. Einfach testen: kompilieren und den assembler code anschauen.
-
ein relativer jump auf sich selbst vielleicht?
-
Schleifen schrieb:
Hi,
Welche Schleife ist eigentlich die Schnellste?for(;;) {}
while(1) {}
do {} while()
Das letzte ist nicht erlaubt, die beiden anderen sind gleich "schnell" (wobei, nach welchen Kriterien misst man die Geschwindigkeit einer Endlosschleife?).
-
Wenn du weißt das eine Schleife mindestens einmal durchlaufen wird und du keinen inkrement-Variable(kann man das typische "int i;" so nennen?) benötigst, dann sollte do{}while(); schneller sein, da die bedingung einmal weniger kontrolliert wird.
Oder ging es hier nur um Endlosschleifen?
Da würde ich einfach while(1){} bzw. while(true){} nehmen, ist einfach die "typische Endlosschleife". Auch wenn do{}while(1); bzw. do{}while(true); theoretisch schneller sind, wenn die Schleife auch irgendwann mal beendet wird.for(;;){} sieht immer so nach "vergessen was einzutragen" aus.
-
[quote="zt"]Sie haben aber auch unterschiedliche Parameter.[quote]
Sie haben eine unterschiedliche Parameteranzahl...trotzdem ist eine Initialisierung, eine Bedingung und eine Reinitialisierung im Programm notwendig um eine Bedingte Anweisung auszuführen.