Tengo una pregunta sobre la velocidad de desreferenciación del puntero. Tengo una estructura como esta:Velocidad de desreferenciación del puntero de estructura C
typedef struct _TD_RECT TD_RECT;
struct _TD_RECT {
double left;
double top;
double right;
double bottom;
};
Mi pregunta es, ¿cuál de estos sería más rápido y por qué?
CASO 1:
TD_RECT *pRect;
...
for(i = 0; i < m; i++)
{
if(p[i].x < pRect->left) ...
if(p[i].x > pRect->right) ...
if(p[i].y < pRect->top) ...
if(p[i].y > pRect->bottom) ...
}
CASO 2:
TD_RECT *pRect;
double left = pRect->left;
double top = pRect->top;
double right = pRect->right;
double bottom = pRect->bottom;
...
for(i = 0; i < m; i++)
{
if(p[i].x < left) ...
if(p[i].x > right) ...
if(p[i].y < top) ...
if(p[i].y > bottom) ...
}
Así en el caso 1, el bucle se dereferencing directamente el puntero pRect para obtener la comparación valores. En el caso 2, se hicieron nuevos valores en el espacio local de la función (en la pila) y los valores se copiaron del pRect a las variables locales. A través de un bucle habrá muchas comparaciones.
En mi mente, serían igualmente lento, ya que la variable local es también una referencia a memoria en la pila, pero no estoy seguro ...
Además, sería mejor mantener referencia p [] por índice, o incrementar p por un elemento y desreferenciarlo directamente sin un índice.
¿Alguna idea? Gracias :)
Deje de perder su tiempo con la optimización prematura que probablemente no hará una gran diferencia. –
tal vez importa la fracción de un smidge, pero si lo hace, ¿por qué no medirlo? – kenny
Para Win32, ¿podría usar GetTickCount() para medir el tiempo antes y después de llamar al ciclo para medir la velocidad, o hay una forma mejor? – oldSkool