我对指针取消引用的速度有疑问。我有这样的结构:
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) ...
}
案例二:
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 增加一个元素并直接取消引用而不使用索引。
有任何想法吗?谢谢 :)