Ottimizzare C++/Scrivere codice C++ efficiente: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 217:
=== Uso dei tipi più efficienti ===
 
'''Per memorizzare in un oggetto dei numeri interi, usa il tipo ''<code>int''</code> o il tipo ''<code>unsigned int''</code>, a meno che sia necessario un tipo più lungo; per memorizzare dei caratteri usa il tipo <code>char</code> o il tipo <code>wchar_t</code>; e per memorizzare dei numeri a virgola mobile, usa il tipo ''<code>double''</code>, a meno che sia necessario il tipo ''<code>long double''</code>. Se l’oggettol'oggetto risultante è medio o grande, sostituisci i tipi interi con il tipo intero più piccolo in grado di contenerlo, ma senza usare i ''bit-field'', e sostituisci i tipi a virgola mobile con il tipo ''<code>float''</code>, a meno che sia necessaria maggiore precisione.'''
 
I tipi ''<code>int''</code> e ''<code>unsigned int''</code> sono per definizione quelli più efficienti su qualunque piattaforma.
 
I tipi ''<code>double''</code> sono efficienti quanto i ''<code>float''</code>, ma sono più precisi.
Tuttavia, nel caso di interi contenuti in array medi o grandi, è meglio minimizzare la dimensione in byte dell’array.
 
Per esempio, per memorizzare un numero intero che può essere compreso tra -1000 e 1000, si può usare uno ''short'', mentre per memorizzare un numero intero che può essere compreso tra 0 e 200, si può usare un ''unsigned char''.
Alcuni tipi di processore elaborano più velocemente gli oggetti di tipo <code>signed char</code>, mentre altre elaborano più velocemente gli oggetti di tipo <code>unsigned char</code>.
Pertanto, in C e in C++ esiste il tipo <code>char</code> che corrisponde al tipo di carattere elaborato più velocemente sul processore target.
 
Tuttavia, nelNel caso di interi contenuti in array medi o grandi, o in collezioni che si presume saranno tipicamente medie o grandi, è meglio minimizzare la dimensione in byte dell’arraydella collezione.
Questo si può fare sostituendo gli <code>int</code> con <code>short</code> o <code>signed char</code>, sostituendo gli <code>unsigned int</code> con <code>unsigned short</code> o <code>unsigned char</code>, e sostituendo i <code>double</code> con i <code>float</code>.
Per esempio, per memorizzare un numero intero che può essere compreso tra -10000 e 1000, si può usare unoun <code>unsigned ''short''</code>, mentre per memorizzare un numero intero che può essere compreso tra 0-100 e 200100, si può usare un ''unsigned<code>signed char''</code>.
 
I bit-field contribuirebbero a minimizzare la dimensione in byte dell'array, ma la loro elaborazione introduce un rallentamento che potrebbe essere eccessivo, per cui andrebbero eventualmente introdotti solo in fase di ottimizzazione.