some_function()
के लिए कुछ संभावित परिभाषाएं फेंक दें, जो फ़ंक्शन आप अपने लूप से कॉल करेंगे।
// Method 1
void some_function() {
int temporary;
// Use temporary
}
// Method 2
void some_function(int temporary) {
// Use temporary
}
// Method 3
void some_function(int *temporary) {
// Use *temporary
}
विधि 1 सबसे इन विकल्पों में से बाहर पठनीय होने की संभावना है, और इसलिए यह एक मैं पसंद करेंगे जब तक आप एक वास्तव में कुछ और करने अच्छा कारण है है। यह तक की तुलना में तेज़ होने की संभावना है, जब तक कि आपका कंपाइलर फ़ंक्शन कॉल को रेखांकित कर रहा हो। यदि ऐसा है, तो सभी तीनों को बिल्कुल वही करने की संभावना है (यदि संकलक सूचक संकेतों को दूर करने में सक्षम नहीं है तो विधि 3 अभी भी धीमा हो सकता है)।
यदि कंपाइलर इनलाइन नहीं कर रहा है, तो विधि 2 विधि 1 की तुलना में धीमी होने की संभावना है। ऐसा इसलिए है क्योंकि, स्टैक-आवंटित स्मृति के मामले में, वे समान हैं - फ़ंक्शन तर्कों को संग्रहीत किया जा रहा है उसी तरह से ढेर स्थानीय लोग हैं। फ़ंक्शन तर्क और इस संदर्भ में स्थानीय के बीच एकमात्र अंतर यह है कि फ़ंक्शन तर्क को कॉलर द्वारा मान दिया जा सकता है। कॉलर से फ़ंक्शन में मान स्थानांतरित करने का यह चरण (सैद्धांतिक रूप से) आमंत्रण को धीमा करने जा रहा है।
विधि 3 लगभग निश्चित रूप से धीमा होने जा रहा है, क्योंकि अस्थायी स्मृति तक पहुंच में एक संकेत का स्तर शामिल होगा। किसी स्थानीय को एक्सेस करने की तुलना में एक पॉइंटर को डिफरेंस करना एक सस्ता ऑपरेशन नहीं है।
बेशक, यदि प्रदर्शन बिल्कुल महत्वपूर्ण है तो आपको इन दृष्टिकोणों को बेंचमार्क करना चाहिए। मुझे संदेह है कि विधि 1 सबसे तेज़ हो जाएगा (या कम से कम दूसरों की तुलना में धीमी नहीं) और इसके अतिरिक्त मेरे लिए अधिक पठनीय लगता है।
क्लीनर कोड में जो भी परिणाम बेहतर अभ्यास है - इस मामले में, फ़ंक्शन के अंदर चर को घोषित करना। यदि आप चिंतित हैं कि कौन सा तेज़ है, तो बेंचमार्क। – cdhowie
तो आप जो पूछ रहे हैं वह है: फ़ंक्शन में चर को बनाकर इसे पैरामीटर के रूप में पास करना? बहुत तुलनीय होना चाहिए। – cnicutar
ठीक है, अच्छा, धन्यवाद। – user2252786