Ich nehme an, dass die Berechnung des Moduls einer Zahl eine etwas teure Operation ist, zumindest im Vergleich zu einfachen arithmetischen Tests (wie sehen, ob eine Zahl die Länge eines Arrays überschreitet). Wenn dies tatsächlich der Fall ist, ist es effizienter zu ersetzen, beispielsweise der folgende Code ein:ist es besser, wenn möglich den mod-Operator zu vermeiden?
res = array[(i + 1) % len];
mit folgendem? :
Die erste ist einfacher auf die Augen, aber ich frage mich, ob die zweite effizienter sein könnte. Wenn ja, kann ich erwarten, dass ein optimierender Compiler das erste Snippet durch das zweite ersetzt, wenn eine kompilierte Sprache verwendet wird?
Natürlich funktioniert diese "Optimierung" (wenn es in der Tat eine Optimierung ist) nicht in allen Fällen (in diesem Fall funktioniert es nur, wenn i+1
nie mehr als len
ist).
Dies könnte ein Fall sein, den Wald für die Bäume zu vermissen. –
Wenn "len" eine Kompilierzeitkonstante ist, macht ein neuer GCC-Compiler (mit '-02') normalerweise clevere Dinge, wobei er oft den Modul-Maschinenbefehl des Zielprozessors vermeidet. –
Das ist wirklich die Art von Optimierung, die Sie vergessen sollten. Der optimierende Compiler wird es besser machen als du. Viel wichtiger ist die Lesbarkeit Ihres Codes. –