Ottimizzare C++/Scrivere codice C++ efficiente/Costrutti che migliorano le prestazioni: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
Riga 8:
'''Non verificare che un puntatore sia non-nullo prima di chiamare <code>delete</code> su di esso.'''
Ossia, non scrivere il seguente codice:
<source lang=cpp>
if (p) delete p;
</source>
Tale controllo viene già fatto da ogni implementazione di <code>delete</code> conforme allo standard, e quindi sarebbe ridondante.
Line 99 ⟶ 105:
'''Come costanti per i casi delle istruzioni <code>switch</code>, usa sequenze compatte di valori, cioè senza lacune o con poche lacune.'''
I compilatori ottimizzanti, quando compilano un'istruzione <code>switch</code> i cui valori dei casi
Per esempio, il seguente codice C++:
Line 118 ⟶ 124:
<source lang=cpp>
// N.B.: Questo non è codice C++
static indirizzo a[] = { caso_a, caso_b,
unsigned int indice = i - 10;
if (indice
goto a[indice]; caso_a: funz_a(); goto fine;
caso_b: funz_b()
fine:
</source>
Line 150 ⟶ 156:
goto fine;
caso_a: funz_a(); goto fine;
caso_b: funz_b()
fine:
</source>
Per così pochi casi, probabilmente non ci sono molte differenze, ma con l'aumentare del numero di casi,
=== Ordine dei casi dell'istruzione <code>switch</code> ===
Line 190 ⟶ 196:
=== Raggruppamento di argomenti di funzione ===
'''Se una funzione riceve almeno sei argomenti, e viene chiamata
Se una funzione riceve pochi argomenti, questi vengono posti direttamente nei registri, e quindi il loro passaggio è molto veloce; ma se gli argomenti non sono pochi,
Se invece si passa solo l'indirizzo di una struttura, questo indirizzo viene sicuramente posto in un registro, e i campi della struttura che non sono modificati tra chiamate successive della funzione devono essere assegnati solo la prima volta.
Line 227 ⟶ 233:
I tipi <code>double</code> sono efficienti quanto i <code>float</code>, ma sono più precisi.
Alcuni tipi di processore elaborano più velocemente gli oggetti di tipo <code>signed char</code>, mentre
Pertanto, in C e in C++ esiste il tipo <code>char</code> che corrisponde al tipo di carattere elaborato più velocemente sul processore target.
Line 254 ⟶ 260:
[[Categoria:Ottimizzare C++|Costrutti che migliorano le prestazioni]]
{{Avanzamento|
|