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.


Anmelden zum Antworten