ब्लॉक स्कोप बनाम मॉलोक का उपयोग कर स्थिर कीवर्ड का क्या फायदा है?स्टेटिक बनाम मॉलोक
उदाहरण के लिए:
समारोह एक:
f() {
static int x = 7;
}
समारोह बी:
f() {
int *x = malloc(sizeof(int));
if (x != NULL)
*x = 7;
}
अगर मैं सही ढंग से इस समझ रहा हूँ, दोनों कार्यक्रमों एक पूर्णांक 7 कि ढेर पर संग्रहीत है बनाने । ए में, मुख्य विधि निष्पादित होने से पहले, कुछ स्थायी भंडारण में बहुत शुरुआत में चर बनाया गया है। बी में, फ़ंक्शन कहने के बाद आप उस स्थान पर स्मृति आवंटित कर रहे हैं और उसके बाद 7 को संग्रहीत करते हैं जहां वह पॉइंटर पॉइंट होता है। आप किस प्रकार की स्थितियों में दूसरे पर एक विधि का उपयोग कर सकते हैं? मुझे पता है कि आप एक्स को फंक्शन ए में मुक्त नहीं कर सकते हैं, तो क्या बी को आमतौर पर अधिक पसंद नहीं किया जा सकता है?
आपके फंक्शन ए में, [स्थैतिक चर ढेर में संग्रहीत नहीं हैं] (http://stackoverflow.com/questions/93039/where-are-static-variables-stored-in-cc) .. – Krishnabhadra
जिस तरह से आप क्या यह एक स्मृति रिसाव है - प्रत्येक बार जब आप f() कहते हैं - मुझे लगता है कि इससे बचने का एक कारण है! – John3136
वे पूरी तरह से एक ही उद्देश्य के लिए नहीं हैं। फंक्शन ए में, पूर्णांक 7 स्थिर क्षेत्र में संग्रहीत होता है (संकलन के दौरान आवंटित, HEAP पर नहीं!)। इसे केवल एक बार आवंटित किया जाता है, जबकि फ़ंक्शन बी में, आप func बी को कॉल करने के बाद एक पूर्णांक आवंटित करते हैं। –