En el siguiente código de ejemplo, asigno algunas instancias del struct Chunk. En los bucles for, repito a través del bloque de memoria y accedo a las diferentes instancias usando puntero o referencias, y les asigno algunos datos aleatorios.¿Cuál es más rápido, acceso a puntero o acceso de referencia?
Pero, ¿cuál de los bucles se ejecutará más rápido? Por lo que sé, diría que el lazo de referencia será el más rápido porque no requerirá desreferenciación y tiene acceso directo a la instancia en la memoria. ¿Qué tan equivocado/correcto soy?
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;
}
Depende de tu compilador, supongo, pero con el mío compilan exactamente el mismo código. La mayoría de los desarrolladores de C++ prefieren las referencias como una cuestión de estilo. –
Recuerde que una referencia es como un puntero desreferenciado automáticamente. – tadman
@tadman No de acuerdo con la norma. –