अलग करना, एकत्रित न, एकत्रित न ...
कोड की पंक्तियों हमें नहीं दिखा रहे हैं यह संभव है पर निर्भर करता है कि यदि आपका सूचक कुछ हद तक स्थैतिक है तो एक अच्छा संकलक जानता है और दोनों के लिए पता पूर्व-गणना करेगा। यदि आपके पास अनुकूलन नहीं है तो यह पूरी चर्चा म्यूट है। यह आपके द्वारा उपयोग किए जा रहे प्रोसेसर पर भी निर्भर करता है, प्रोसेसर के आधार पर दोनों को एक ही निर्देश के साथ किया जा सकता है। इसलिए मैं बुनियादी अनुकूलन चरणों का पालन करें:
1) एकत्रित न और जांच 2) समय निष्पादन
ऊपर हालांकि लब्बोलुआब यह है यह बजाय एक से दो निर्देश का मामला एक भी घड़ी की लागत हो सकता है उल्लेख किया है चक्र जो आप कभी नहीं देख पाएंगे। आपके कंपाइलर और ऑप्टिमाइज़र विकल्पों की गुणवत्ता प्रदर्शन में सुधार की उम्मीद में कोड की एक पंक्ति को ट्विक करने की कोशिश करने से कहीं अधिक नाटकीय प्रदर्शन अंतर करने जा रही है। स्विचिंग कंपाइलर्स आपको कभी-कभी दिशा में 10-20% दे सकते हैं। जैसा कि आपके अनुकूलन झंडे को बदल सकता है, सबकुछ चालू करने से सबसे तेज़ कोड नहीं होता है, कभी-कभी -O1 -O3 से बेहतर प्रदर्शन करता है।
कोड की उन दो पंक्तियों को समझना और उच्च स्तर की भाषा से प्रदर्शन को अधिकतम करने के तरीके को समझना विभिन्न प्रोसेसर के लिए संकलन और विभिन्न कंपाइलरों का उपयोग करके अलग-अलग होता है। और अधिक महत्वपूर्ण बात यह है कि प्रश्न में लाइनों के चारों ओर कोड एक बड़ी भूमिका निभाता है कि संकलक उस सेगमेंट को कैसे अनुकूलित करता है। (है कि महान एक संकलक नहीं)
typedef struct
{
unsigned int first;
unsigned int second;
} dataStruct;
dataStruct data;
int main()
{
dataStruct *pData = &data;
data.first = 9;
pData->second = 10;
return(0);
}
जीसीसी के साथ
आपको मिलता है::
इस प्रश्न पर किसी और के उदाहरण का उपयोग
mov r2, #10
mov r1, #9
stmia r3, {r1, r2}
तो सी कोड की दोनों पंक्तियों का एक दुकान में शामिल हो गए हैं, यहां समस्या एक परीक्षण के रूप में इस्तेमाल किया उदाहरण है। दो अलग-अलग फ़ंक्शंस थोड़ा बेहतर होते थे, लेकिन इसके आस-पास बहुत अधिक कोड की आवश्यकता होती है और पॉइंटर को किसी अन्य मेमोरी पर इंगित करने की आवश्यकता होती है ताकि ऑप्टिमाइज़र को यह पता न लगे कि यह एक स्थिर वैश्विक पता है, इसका परीक्षण करने के लिए आपको पता पारित करने की आवश्यकता है इसलिए संकलक (अच्छी तरह से जीसीसी) यह नहीं समझ सकता कि यह एक स्थिर पता है।
या कोई अनुकूलन के साथ, एक ही कोड, एक ही कंपाइलर, सूचक और प्रत्यक्ष के बीच कोई अंतर नहीं।
mov r3, #9
str r3, [r2, #0]
mov r3, #10
str r3, [r2, #4]
यह आपको संकलक और प्रोसेसर के आधार पर देखने के लिए, वहाँ कोई अंतर हो सकता है उम्मीद करेंगे क्या है। इस प्रोसेसर के लिए भी अगर टेस्ट कोड फ़ंक्शन से पॉइंटर के लिए स्थिर पता छुपाता है तो भी यह दो निर्देशों तक उबाल जाएगा। यदि संरचना तत्व में संग्रहीत मूल्य पहले से ही एक रजिस्टर में लोड किया गया था तो यह एक निर्देश होगा, पॉइंटर या प्रत्यक्ष।
तो आपके प्रश्न का उत्तर पूर्ण नहीं है ...निर्भर करता है। अलग करना और परीक्षण करना।
एक पॉइंटर आपको उस सीधी पहुंच के साथ क्या प्रदान करता है? और एक सूचक धीमा है। –
-1 माइक्रो-ऑप्टिमाइज़ेशन के बारे में पूछने के लिए पहले इसे बेंचमार्किंग के बिना। – bk1e