Utilizzare il modulo che è più utile dal punto di vista funzionale per il programma. Fondamentalmente, questo significa che è utile che il valore sia nil
, quindi utilizzare un puntatore.
Dal punto di vista delle prestazioni, i tipi numerici primitivi sono sempre più efficienti da copiare rispetto al dereferenziamento di un puntatore. Anche le strutture di dati più complesse sono ancora più veloci da copiare se sono più piccole di una linea cache o due (sotto 128 byte è una buona regola per le CPU x86).
Quando le cose diventano un po 'più grandi, è necessario fare un benchmark se le prestazioni riguardano te. Le CPU sono molto efficienti per la copia dei dati, e ci sono così tante variabili coinvolte che determinano la località e la cache dei tuoi dati, dipende molto dal comportamento del tuo programma e dall'hardware che stai utilizzando.
Questa è un'eccellente serie di articoli se si desidera comprendere meglio il modo in cui la memoria e il software interagiscono: "What every programmer should know about memory".
In breve, dico alle persone di scegliere un puntatore o meno in base alla logica del programma e preoccuparsi delle prestazioni in seguito.
- Utilizzare un puntatore se è necessario passare qualcosa da modificare.
- Utilizzare un puntatore se è necessario determinare se qualcosa è stato disattivato/nullo.
- Utilizzare un puntatore se si utilizza un tipo con metodi con destinatari del puntatore.
Aggiungo solo un chiarimento alla tua risposta eccellente: manca il quarto punto: "altrimenti, non usare un puntatore a meno che non dia un miglioramento delle prestazioni molto chiaro" –