ポインタの間接参照の速度について質問があります。私はそのような構造を持っています:
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を1つの要素でインクリメントして、インデックスなしで直接逆参照する方がよいでしょうか。
何か案は?ありがとう :)