अब प्रदर्शन से संबंधित उत्तर।
क्या मुझे ब्लॉक के अंदर स्थानीय (ब्लॉक के लिए) डेटा घोषित और आरंभ करना चाहिए? क्या इसमें रनटाइम प्रदर्शन लागत है (स्टैक में रनटाइम आवंटन के कारण)?
स्थानीय चर का आवंटन व्यावहारिक रूप से मुफ़्त है। ज्यादातर मामलों में, यह वास्तव में मुफ़्त होगा, क्योंकि स्टैक पॉइंटर का अद्यतन उसी निर्देश में किया जाता है जो स्टैक के मान को लिखता है। डीलोकेशन या तो मुफ्त भी है (जब स्टैक से कुछ पॉप हो जाता है), या वापसी पर एक बार किया जाता है (जब एक स्टैक फ्रेम बनाया गया था)।
या क्या मुझे फ़ंक्शन एंट्री पर सभी चर घोषित और/या प्रारंभ करना चाहिए, ताकि यह एक, संभवतः तेज़, ऑपरेशन ब्लॉक में किया जा सके?
आवंटन लगभग स्वतंत्र है, चलने वाले निर्माता/विनाशक नहीं हैं। हालांकि यह आदिम प्रकारों के चर पर लागू नहीं होता है, यह स्मार्ट पॉइंटर्स और इसी तरह के सभी उपयोगकर्ता परिभाषित प्रकारों पर लागू होता है। यदि आप फ़ंक्शन की शुरुआत में एक स्मार्ट पॉइंटर घोषित करते हैं, लेकिन केवल उस समय का उपयोग करें, जिसे आप बनाते हैं, और बाद में स्मार्ट पॉइंटर को जितना आवश्यक हो उतना दोगुना कर दें।
इसके अलावा, यदि आप एक वैरिएबल घोषित करते हैं जहां आपके पास अपनी जरूरतों को शुरू करने के लिए जानकारी है, तो आप इसे सीधे उस स्थिति में बना सकते हैं, जिसे आप पहले डिफ़ॉल्ट रूप से बनाना चाहते हैं, इसे केवल इसके बाद के मूल्य को बदलने के लिए कई मामलों में असाइनमेंट ऑपरेटर)। तो, एक प्रदर्शन परिप्रेक्ष्य से, आपको हमेशा देर से चर और केवल उन ब्लॉकों में घोषित करना चाहिए जिन्हें उनकी आवश्यकता है।
या क्या मुझे अलग-अलग कार्यों में if() ब्लॉक अलग करना चाहिए, भले ही वे केवल कुछ पंक्तियां हों और कार्यक्रम में केवल एक ही इस्तेमाल किया जाए?
नहीं, यह एक प्रदर्शन परिप्रेक्ष्य से पूरी तरह से contraproductive है। प्रत्येक फंक्शन कॉल में ओवरहेड होता है, मुझे लगता है कि यह ज्यादातर समय 10 से 20 चक्रों के बीच है। आप उस समय काफी गणना कर सकते हैं।
क्या आप दावा पर स्रोत और/या स्पष्टीकरण प्रदान कर सकते हैं "सभी आवंटन पहले किए गए हैं"। मुझे लगता है कि सी छोटी और उबाऊ भाषा है, लेकिन अब मेरा दिमाग बदल रहा है! – Vorac
अधिक सटीक होने के लिए, ऐसे आवंटन और प्रारंभिक कार्य किए जाते हैं हालांकि संकलक निर्णय लेता है सबसे कुशल है। –
मैं इंप्रेशन के तहत हूं, और यह विवाद ** मोहित ** का जवाब है, जो एक स्थानीय चर का दायरा है और पहले शुरू किया जा रहा है, इसका मतलब यह नहीं है कि इसके लिए आवंटित स्थान है यानी संकलक वैरिएबल के स्वतंत्र रूप से स्थान का उपयोग करता है, जिन्हें अब चर के दायरे के अंत तक संदर्भित नहीं किया जाता है। – Vorac