Discussione:Ottimizzare C++/Ottimizzazione del codice C++/Pipeline
Aggiungi argomentoa = lookup_table[b1 << 2 + b2 < 1 + b3]; dovrebbe essere meglio di a = lookup_table[b1 * 4 + b2 * 2 + b3];
Inoltre, in generale la lookup table puo' funzionare solo nelle implementazioni in cui true vale 1; se vale -1, la cosa non funziona perche' si leggerebbe un indirizzo non valido (in questo caso conviene fare una enum Bool_e = { Bool_false, Bool_true }; .
Che ne pensate?
Mi pare che qualunque compilatore ottimizzante, per b1 * 4
genera lo stesso codice che per b1 << 2
.
Però dimmi se hai un controesempio, cioè un compilatore che non genera lo stesso codice nei due casi, o comunque un programma che risulta più lento con la moltiplicazione rispetto allo shift.
Per quanto riguarda l'implementazione di "true", nella sezione 4.2 del libro "C++: Linguaggio, libreria standard, principi di programmazione" di Bjarne Stroustrup c'è scritto: "Per definizione true
corrisponde al valore 1
e false
al valore 0
".
Quindi non dovrebbero esserci implementazioni per cui true non vale 1.
--Carlo.milanesi (disc.) 17:57, 11 mag 2013 (CEST)