Скорость разыменования указателя структуры C

У меня вопрос по скорости разыменования указателя. У меня такая структура:

typedef struct _TD_RECT TD_RECT;
struct _TD_RECT {
  double left;
  double top;
  double right;
  double bottom;
};

У меня вопрос, что из этого будет быстрее и почему?


СЛУЧАЙ 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) ...
}

СЛУЧАЙ 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) ...
}

Итак, в случае 1 цикл напрямую разыменовывает pRect указатель для получения значений сравнения. В случае 2 новые значения были внесены в локальное пространство функции (в стеке), и значения были скопированы из pRect в локальные переменные. В цикле будет много сравнений.

На мой взгляд, они будут одинаково медленными, потому что локальная переменная также является ссылкой на память в стеке, но я не уверен ...

Кроме того, Лучше продолжать ссылаться на p [] по индексу или увеличивать p на один элемент и разыменовать его напрямую без индекса.

Есть идеи? Спасибо :)

7
задан Vicky 21 October 2010 в 11:24
поделиться