Dies ist eine Antwort, die ich auf eine andere Frage zu Duffs Gerät gepostet habe, die einige positive Bewertungen erhalten hat, bevor die Frage als Duplikat geschlossen wurde. Ich denke, es bietet hier einen wertvollen Kontext dafür, warum Sie dieses Konstrukt vermeiden sollten.
"Das ist Duffs Gerät . Es ist eine Methode zum Abrollen von Schleifen, bei der vermieden wird, dass eine sekundäre Fixup-Schleife hinzugefügt werden muss, um Zeiten zu bewältigen, in denen die Anzahl der Schleifeniterationen kein genaues Vielfaches des Abrollfaktors ist.
Da die meisten Antworten hier allgemein positiv zu sein scheinen, werde ich die Nachteile hervorheben.
Mit diesem Code wird ein Compiler Schwierigkeiten haben, eine Optimierung auf den Schleifenkörper anzuwenden. Wenn Sie den Code nur als einfache Schleife geschrieben haben, sollte ein moderner Compiler in der Lage sein, das Abrollen für Sie zu erledigen. Auf diese Weise behalten Sie die Lesbarkeit und Leistung bei und hoffen, dass weitere Optimierungen auf den Schleifenkörper angewendet werden.
Der Wikipedia-Artikel, auf den andere verweisen, sagt sogar, als dieses "Muster" aus dem Xfree86-Quellcode entfernt wurde, hat sich die Leistung tatsächlich verbessert.
Dieses Ergebnis ist typisch für die blinde Handoptimierung von Code, von dem Sie glauben, dass er benötigt wird. Es verhindert, dass der Compiler seine Arbeit ordnungsgemäß ausführt, macht Ihren Code weniger lesbar und anfälliger für Fehler und verlangsamt ihn normalerweise. Wenn Sie die Dinge an erster Stelle richtig machen würden, dh einfachen Code schreiben, dann Profile für Engpässe erstellen und dann optimieren, würden Sie niemals daran denken, so etwas zu verwenden. Jedenfalls nicht mit einer modernen CPU und einem modernen Compiler.
Es ist in Ordnung, es zu verstehen, aber ich wäre überrascht, wenn Sie es jemals tatsächlich benutzen würden. "