मेरे पास पॉइंटर डीरफ्रेंसिंग की गति के बारे में एक प्रश्न है। मेरे पास एक संरचना है:सी संरचना सूचक डेरफ़्रेंसिंग गति
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 मामले में, फ़ंक्शन की स्थानीय स्थान (स्टैक पर) पर नए मान बनाए गए थे और मानों को पीआरईटी से स्थानीय चरों में कॉपी किया गया था। एक लूप के माध्यम से कई तुलना होगी।
मेरे मन में, वे समान रूप से धीमी गति से हो सकता है, क्योंकि स्थानीय चर भी ढेर पर एक स्मृति संदर्भ है, लेकिन मुझे यकीन है कि नहीं कर रहा हूँ ...
इसके अलावा, यह बेहतर होगा पी संदर्भित रखने के लिए [] इंडेक्स द्वारा, या एक तत्व द्वारा वृद्धि पी और इसे सीधे एक सूचकांक के बिना dereference।
कोई विचार? धन्यवाद :)
समयपूर्व अनुकूलन के साथ अपना समय बर्बाद कर दें जो अधिकतर एक अंतर का एक स्मिडजेन नहीं बनायेगा। –
शायद एक स्मीज मामलों का अंश, लेकिन अगर ऐसा होता है, तो इसका आकलन क्यों नहीं करें? – kenny
Win32 के लिए, क्या मैं गति को मापने के लिए लूप को कॉल करने से पहले और बाद में मापने के लिए GetTickCount() का उपयोग कर सकता हूं, या क्या कोई बेहतर तरीका है? – oldSkool