Discussione:Ottimizzare C++/Ottimizzazione del codice C++/Pipeline

Wikibooks, manuali e libri di testo liberi.
Jump to navigation Jump to search

a = 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)