c++ क्या () और जबकि () के बीच कोई प्रदर्शन अंतर है?





8 Answers

यदि आपके लिए और लूप एक ही चीज करते हैं, तो कंपाइलर द्वारा उत्पन्न मशीन कोड (लगभग) होना चाहिए।

उदाहरण के लिए कुछ परीक्षणों में मैंने कुछ साल पहले किया था,

for (int i = 0; i < 10; i++)
{
...
}

तथा

int i = 0;
do
{
  ...
  i++;
}
while (i < 10);

एक ही जेएमपी के साथ बिल्कुल वही कोड उत्पन्न करेगा, या (और नील टिप्पणियों में इंगित किया जाएगा), जो चिंता करने के लिए प्रदर्शन में काफी बड़ा अंतर नहीं देगा।

c++ c performance for-loop while-loop

या यह सब अर्थशास्त्र के बारे में है?




while लूप के परीक्षण में चर के दायरे के for लूप के शीर्षलेख में घोषित चर के दायरे से अधिक व्यापक है।

इसलिए, यदि परिवर्तनीय जीवित लंबे समय तक रखने के दुष्प्रभाव के रूप में प्रदर्शन प्रभाव हैं, तो थोड़ी देर के बीच चुनने के लिए प्रदर्शन प्रभाव होंगे और लूप के लिए चुनने में प्रदर्शन प्रभाव होंगे (और इसके दायरे को कम करने के लिए {} में थोड़ी देर लपेटना नहीं होगा चर )।

एक उदाहरण एक समवर्ती संग्रह हो सकता है जो इसे संदर्भित करने वाले इटरेटर की संख्या की गणना करता है, और यदि एक से अधिक इटरेटर मौजूद हैं, तो यह समवर्ती संशोधन को रोकने के लिए लॉकिंग लागू होता है, लेकिन एक ऑप्टिमाइज़ेशन लॉकिंग को बढ़ाता है अगर केवल एक इटरेटर इसे संदर्भित करता है। यदि आपके पास एक ही कंटेनर पर अलग-अलग नामित इटरेटर्स का उपयोग करके फ़ंक्शन में लूप के for दो थे, तो तेज़ पथ लिया जाएगा, लेकिन दो के साथ लूप धीमे पथ को लिया जाएगा। इसी प्रकार प्रदर्शन के प्रभाव हो सकते हैं यदि ऑब्जेक्ट बड़े हैं (अधिक कैश ट्रैफिक), या सिस्टम संसाधनों का उपयोग करें। लेकिन मैं एक असली उदाहरण के बारे में नहीं सोच सकता कि मैंने कभी देखा है कि इससे कोई फर्क पड़ता है।




दोनों बराबर हैं। यह अर्थशास्त्र का मामला है।

केवल अंतर ही काम में पड़ सकता है ... निर्माण करते समय, जहां आपने शरीर के बाद तक स्थिति के मूल्यांकन को स्थगित कर दिया, और इस प्रकार 1 मूल्यांकन बचा सकता है।

i = 1; do { ... i--; } while( i > 0 ); 

विरोध के रूप में

for(  i = 1; i > 0; --i )
{ ....
}  



नहीं। अगर वे समकक्ष चीजें कर रहे हैं, तो वे उसी कोड को संकलित करेंगे - जैसा कि आप कहते हैं, यह अर्थशास्त्र के बारे में है। वह चुनें जो सबसे अच्छा प्रतिनिधित्व करता है जिसे आप व्यक्त करने की कोशिश कर रहे हैं।




Atmel ATMega पर () () के लिए तेज है। AVR035 में यह क्यों समझाया गया है: एवीआर के लिए कुशल सी कोडिंग।

सवाल में पीएस मूल मंच का उल्लेख नहीं किया गया था।




एक और जवाब जोड़ने के लिए: मेरे अनुभव में, सॉफ़्टवेयर अनुकूलित करना एक बड़े, झाड़ीदार दाढ़ी को एक आदमी से मुंडा कर रहा है।

  • सबसे पहले आप इसे कैंची के साथ बड़े हिस्सों में बंद कर देते हैं (कॉल पेड़ से पूरे अंगों को छिड़कें)।
  • फिर आप इसे इलेक्ट्रिक क्लिपर (ट्विक एल्गोरिदम) से छोटा बनाते हैं।
  • अंत में आप इसे अंतिम थोड़ा सा (निम्न-स्तरीय अनुकूलन) से छुटकारा पाने के लिए एक रेज़र के साथ दाढ़ी देते हैं।

आखिरी वह जगह है जहां for() और while() बीच का अंतर हो सकता है, लेकिन शायद नहीं, एक फर्क पड़ता है।

पीएस प्रोग्रामर मुझे पता है (जो सभी बहुत अच्छे हैं, और मुझे संदेह है कि एक प्रतिनिधि नमूना हैं) मूल रूप से दूसरी दिशा से इसे देखते हैं।




कुछ मामलों में एक अंतर है।

यदि आप उस बिंदु पर हैं जहां वह अंतर महत्वपूर्ण है, तो आपको या तो एक बेहतर एल्गोरिदम चुनना होगा या असेंबली भाषा में कोडिंग शुरू करना होगा। मेरा विश्वास करो, असेंबली में कोडिंग आपके कंपाइलर संस्करण को ठीक करने के लिए बेहतर है।




शायद केवल कोडिंग शैली।

  • यदि आप पुनरावृत्तियों की संख्या जानते हैं।
  • जबकि अगर आप पुनरावृत्तियों की संख्या नहीं जानते हैं।





Related