Nell'esempio di codice seguente alloco alcune istanze della struct Chunk. Nei cicli for, quindi, eseguo l'iterazione nel blocco di memoria e accedo alle diverse istanze utilizzando il puntatore oi riferimenti e assegna loro alcuni dati casuali.Qual è più veloce, accesso puntatore o accesso di riferimento?
Ma quale ciclo eseguirà il più veloce? A mia conoscenza, direi che il ciclo di riferimento sarà il più veloce perché non richiede il dereferenziamento e ha accesso diretto all'istanza in memoria. Quanto errato/giusto sono?
struct Chunk {
unsigned int a;
float b;
const char* c;
};
int main() {
Chunk* pData = new Chunk[8];
for(unsigned int i = 0; i < 8; ++i) {
Chunk* p = &pData[i];
p->a = 1;
p->b = 1.0f;
p->c = "POINTERS";
}
for(unsigned int i = 0; i < 8; ++i) {
Chunk& r = pData[i];
r.a = 1;
r.b = 1.0f;
r.c = "REFERENCES";
}
delete [] pData;
return 0;
}
Dipende dal compilatore, suppongo, ma con il mio compilano lo stesso codice esatto. La maggior parte degli sviluppatori C++ preferisce i riferimenti come una questione di stile. –
Ricorda che un riferimento è come un puntatore automaticamente de-referenziato. – tadman
@tadman Non conforme allo standard. –