Suppongo che il calcolo del modulo di un numero sia un'operazione alquanto costosa, almeno rispetto ai semplici test aritmetici (come vedere se un numero supera la lunghezza di un array). Se questo è davvero il caso, è più efficiente per sostituire, ad esempio, il seguente codice:è meglio evitare l'uso dell'operatore mod quando possibile?
res = array[(i + 1) % len];
con il seguente? :
res = array[(i + 1 == len) ? 0 : i + 1];
Il primo è più facile per gli occhi, ma mi chiedo se il secondo potrebbe essere più efficiente. Se è così, potrei aspettarmi un compilatore ottimizzante per sostituire il primo frammento con il secondo, quando viene utilizzato un linguaggio compilato?
Ovviamente questa "ottimizzazione" (se si tratta in effetti di un'ottimizzazione) non funziona in tutti i casi (in questo caso funziona solo se i+1
non è mai più di len
).
Questo potrebbe essere il caso di mancare la foresta per gli alberi. –
se 'len' è una costante in fase di compilazione un recente compilatore GCC (con' -02') sta di solito facendo cose intelligenti, evitando spesso l'istruzione della macchina modulo del processore di destinazione. –
Questo è davvero il tipo di ottimizzazione da dimenticare. Il compilatore ottimizzante farà meglio di quanto potresti. Ciò che conta di più è la leggibilità del tuo codice. –