tutorial - the c++ programming language




C++ में postincrement से तेजी से preincrement-सच? यदि हां, तो यह क्यों है? (4)

किसी सभ्य कंपाइलर पर, ++ i और i ++ समान हैं यदि मान का उपयोग नहीं किया जाता है।

यदि मान का उपयोग किया जाता है, ++ यदि समान अर्थशास्त्र चाहते थे तो मुझे पूर्व-वृद्धि मूल्य को स्टोर करने के लिए अस्थायी की आवश्यकता होगी।

संभावित डुप्लिकेट:
क्या सी ++ में i ++ और ++ i के बीच कोई प्रदर्शन अंतर है?

मैंने सुना है कि preincrements (++ i) सी ++ में postincrements (i ++) से थोड़ा तेज हैं। क्या यह सच है? और इसके लिए क्या कारण है?


पोस्ट-ग्रोथमेंट में आमतौर पर पिछले मूल्य की प्रतिलिपि रखना शामिल होता है और थोड़ा अतिरिक्त कोड जोड़ता है। पूर्व-वृद्धि केवल यह काम करती है और रास्ते से बाहर हो जाती है। मैं आमतौर पर पूर्व-वृद्धि करता हूं जब तक कि अर्थशास्त्र बदल नहीं जाता है और बाद में वृद्धि वास्तव में आवश्यक होती है।


वास्तव में - यह निर्भर करता है। Postincrement एक प्रति की जरूरत है क्योंकि यह पुराने मूल्य को बरकरार रखता है। यदि बढ़ी हुई प्रकार एक जटिल प्रकार है (उदाहरण के लिए एक इटरेटर) और एक साधारण प्रकार नहीं है, तो प्रीइंक्रिकमेंट पोस्टिनक्रिकमेंट से तेज है। यह केवल तभी सच है यदि आपको वृद्धि से पहले मूल्य की आवश्यकता नहीं है।

कुछ कंपाइलर्स यह भी पता लगा सकते हैं कि आपको पोस्टिनक्रिएटमेंट की आवश्यकता नहीं है और प्रतिलिपि को अनुकूलित करें - लेकिन हमेशा के रूप में - यह उस पर भरोसा करने की एक बुरी आदत है।


सादा प्रकार के प्रकारों के लिए अंतर जैसे कि int संभवतः नगण्य है। मुझे लगता है कि संकलक ऐसे मामलों को अनुकूलित करने में सक्षम है (उदाहरण के लिए एक उपसर्ग वृद्धि में एक पोस्टफिक्स को चालू करें)। हालांकि, जटिल प्रकारों के लिए (आमतौर पर एसटीएल इटरेटर्स अंतर ध्यान देने योग्य हो सकता है)। कंपाइलर इन मामलों में उपसर्ग में स्विच करने में सक्षम नहीं है क्योंकि ऑपरेटर वास्तव में पूरी तरह से अलग-अलग चीजें कर सकते हैं। मैं एसटीएल इटरेटर्स के लिए पोस्ट-इंक्रिमेंट का उपयोग करने पर प्रदर्शन दंड पर कुछ पृष्ठभूमि जानकारी के लिए एसटीएल इटरेटर्स और प्रदर्शन पढ़ने की सलाह देता हूं (छोटी कहानी: प्री-इंक्रिमेंट के रूप में दो बार लगती है)।






c++