पहले मामले में, a
स्वचालित संग्रहण के sizeof(int *)
बाइट्स पर कब्जा कर लेता है, और यह 10 * sizeof(int)
डायनामिक स्टोरेज के बाइट्स पर इंगित करता है।
बाद के मामले में, b
स्वचालित भंडारण के 10 * sizeof(int)
बाइट्स पर कब्जा करता है। क्योंकि b
एक सरणी है, कोई सूचक नहीं है।
तो पहला मामला अधिक बाइट्स का उपयोग करता है, लेकिन स्टैक पर कम (माना जाता है कि एक स्टैक स्वचालित संग्रहण के लिए उपयोग में है)।
यदि उपयोग किए जाने वाले बाइट्स की कुल संख्या अपेक्षाकृत छोटी है, तो स्वचालित संग्रहण आमतौर पर ठीक है। बड़ी मात्रा के लिए, गतिशील भंडारण को प्राथमिकता दी जाती है। विशेष रूप से ढेर कार्यान्वयन के लिए, बहुत अधिक स्वचालित चर होने के कारण बहुत अधिक बड़े पैमाने पर ढेर बह सकते हैं।
यह कंपाइलर कैसे काम करता है इस पर निर्भर करता है कि यह पॉइंटर '* ए 'के लिए स्टैक में किसी भी स्मृति को आवंटित या नहीं कर सकता है। यदि आप कहीं भी '& a' का उपयोग करते हैं, हाँ, लेकिन अन्यथा सभी दांव बंद हैं। –
धन्यवाद। मैं अपना जवाब दूंगा। – giusti
@DietrichEpp फिर से पढ़ना, मैंने आपकी टिप्पणी को गलत समझा होगा। क्या आप मुझे एक ठोस उदाहरण दे सकते हैं? – giusti