Zakładam, że obliczanie modułu liczby jest dość kosztowną operacją, przynajmniej w porównaniu z prostymi testami arytmetycznymi (takimi jak sprawdzanie, czy liczba przekracza długość tablicy). Jeśli tak jest rzeczywiście, czy skuteczniej jest zastąpić, na przykład, następujący kod:czy lepiej unikać operatora mod, kiedy to możliwe?
res = array[(i + 1) % len];
z następującymi? :
Pierwszy jest łatwiejszy w oczach, ale zastanawiam się, czy drugi może być bardziej wydajny. Jeśli tak, czy mogę oczekiwać, że kompilator optymalizujący zastąpi pierwszy fragment kodu drugim, gdy używany jest język skompilowany?
Oczywiście ta "optymalizacja" (jeśli rzeczywiście jest to optymalizacja) nie działa we wszystkich przypadkach (w tym przypadku działa tylko wtedy, gdy i+1
nigdy nie jest większa niż len
).
To może być przypadek zaginięcia lasu dla drzew. –
Jeśli 'len' jest stałą czasu kompilacji, ostatni kompilator GCC (z' -02') zwykle robi sprytne rzeczy, często unikając instrukcji maszyny modułowej docelowego procesora. –
To jest rodzaj optymalizacji, o której należy zapomnieć. Kompilator optymalizacyjny zrobi lepiej, niż mógłbyś. Ważniejsze jest czytelność twojego kodu. –