2011-09-08 19 views
5

मुझे याद है कि साल पहले यह सुन रहा था कि विशेष रूप से प्रोग्रामिंग माइक्रोप्रोसेसरों के दौरान बढ़ने के बजाय लूप कम करने के लिए यह अधिक कुशल है। क्या यह सच है, और यदि हां, तो क्या कारण हैं?लूप कम करने के लिए बेहतर है?

+0

शायद यह असेंबलर निर्देश 'लूप' पर निर्भर करता है जो 'ईसीएक्स' को शून्य में घटा देता है। लेकिन उच्च स्तर की भाषाओं पर इसे अधिक प्रभाव नहीं देना चाहिए। – Nobody

+0

सी # टैग उलझन में है: आपका प्रश्न सीपीयू आर्किटेक्चर पर निर्भर करता है, लेकिन सी # को आईएल कोड में संकलित किया गया है जिसे निर्देश सेट –

+0

के आधार पर विभिन्न मशीन कोड निर्देशों में अनुवादित किया जा सकता है यदि आपके पास वास्तविक कोड है जो दूसरे की तुलना में तेज़ तरीका है , इसे पोस्ट करें और पूछें क्यों। अन्यथा, यह एक बहुत ही उपयोगी सवाल नहीं है। – Gabe

उत्तर

10

बल्ले से निकलने वाली एक बात यह है कि कम करने वाले लूप पर अंतिम स्थिति तेज होने के लिए उत्तरदायी है। यदि आप एक प्रमाण पत्र मूल्य पर लूप कर रहे हैं, तो उस मान के साथ तुलना प्रत्येक पुनरावृत्ति की आवश्यकता होगी। हालांकि, यदि आप शून्य पर लूपिंग कर रहे हैं, तो अधिकांश प्रोसेसर पर कमी स्वयं शून्य ध्वज सेट करेगी यदि मान घटित शून्य शून्य हो जाता है, इसलिए कोई अतिरिक्त तुलना ऑपरेशन की आवश्यकता नहीं होगी।

छोटे आलू मुझे एहसास है, लेकिन एक बड़े तंग आंतरिक लूप में यह एक बड़ा सौदा हो सकता है।

+0

से तुलना करने के लिए और अधिक है यह वास्तव में उत्तर –

+0

है यदि आप इस प्रभाव को दिखाते हुए कुछ समय विश्लेषण पोस्ट कर सकते हैं, तो यह प्रश्न फिर से खोलने योग्य हो सकता है। – Gabe

+2

@Gabe - एक अजीब अनुरोध। आम तौर पर, मैं वास्तव में इस तरह सूक्ष्म अनुकूलन के आपके संदेह की सराहना करता हूं। मैं निश्चित रूप से ऐसा करने के लिए एचएलएल कोड को खारिज नहीं कर रहा हूं जब तक कि मेरे पास संख्याएं प्रदर्शित न हों, इससे बहुत मदद मिलती है। हालांकि, तथ्य यह है कि (M68K या Ix86 की तरह प्रोसेसर पर) इसके लिए एक अतिरिक्त निर्देश संदेह से परे है। मुझे नहीं लगता कि मेरे पास वास्तव में आपको यह साबित करने के लिए नि: शुल्क समय है कि कोई निर्देश निष्पादित करना एक निर्देश निष्पादित करने से तेज़ है। –

2

सी # में यह दक्षता में कोई फर्क नहीं पड़ता है। लूप कम करने का एकमात्र कारण यह है कि यदि आप संग्रह के माध्यम से लूपिंग कर रहे हैं और आइटम को हटाते समय हटा रहे हैं।

0

कमी के बारे में पता नहीं है, लेकिन मुझे पता है कि i ++ के बजाय ++ का उपयोग करना अधिक प्रदर्शनकारी है।

वेब पर बहुत सारे लेख क्यों हैं, लेकिन यह नीचे आता है: ++ का उपयोग करके मैं इसे बनाता हूं ताकि मुझे स्वचालित रूप से पहली बार घोषित किया जा सके और i ++ का उपयोग करने से ऐसा नहीं होता है।

फिर (कम से कम सी # में), अगर decrementing अधिक performant है पता नहीं है, बस सोचा था कि मैं वहाँ है कि बाहर फेंक होता है आप कैसे प्रदर्शन :)

तुम बस का उपयोग करेंगे बारे में पूछ रहे देखकर कमीशन क्योंकि कुछ परिस्थितियों में यह आसान है क्योंकि मुझे पता है ..

+1

निश्चित रूप से यह सच नहीं है –

संबंधित मुद्दे