हीप बनाम स्टैक ऑब्जेक्ट निर्माण: एक गहरा गोता
सी में, ऑब्जेक्ट निर्माण को स्टैक-आधारित या हीप के रूप में वर्गीकृत किया जा सकता है- आधारित। हालाँकि इन दो प्रकार के निर्माण के लिए वाक्यविन्यास थोड़ा भिन्न है, अंतर्निहित मेमोरी प्रबंधन सिद्धांतों को समझना आवश्यक है।
स्टैक-आधारित ऑब्जेक्ट
कोड स्निपेट प्रदान किया गया, ऑब्जेक्ट o;, फ़ंक्शन के स्टैक पर एक ऑब्जेक्ट आवंटित करता है। स्वचालित भंडारण अवधि के साथ, ये ऑब्जेक्ट फ़ंक्शन के निष्पादन के दौरान स्टैक पर रहते हैं और फ़ंक्शन रिटर्न पर नष्ट हो जाते हैं। पॉइंटर ओ स्टैक पर ऑब्जेक्ट का पता संग्रहीत करता है। ओ; ओ = नई वस्तु();। पहली पंक्ति में, पॉइंटर ओ को स्टैक पर आवंटित किया जाता है, जबकि वास्तविक ऑब्जेक्ट नए ऑपरेटर का उपयोग करके दूसरी पंक्ति में ढेर पर बनाया जाता है। सूचक ओ अब ढेर-आवंटित वस्तु की ओर इशारा करता है। सी मानक. इसके बजाय, मानक भंडारण अवधि की अवधारणा का परिचय देता है, जो स्वचालित, गतिशील, स्थिर या थ्रेड-स्थानीय हो सकता है।
स्वचालित भंडारण, आमतौर पर स्टैक पर लागू किया जाता है, स्थानीय चर और कुछ प्रकार की वस्तुओं के लिए उपयोग किया जाता है . दूसरी ओर, स्टेटिक स्टोरेज आमतौर पर स्टैक या हीप से जुड़ा नहीं होता है बल्कि एक अलग मेमोरी क्षेत्र में रहता है। सदस्य चर उन वस्तुओं की भंडारण अवधि प्राप्त करते हैं जिनसे वे संबंधित हैं।
एक उदाहरण उदाहरणनिम्न कोड पर विचार करें:struct Foo { वस्तु ओ; }; फू फू; मुख्य प्रवेश बिंदु() { फू एफ; फू* पी = नया फू; फू* पीएफ = &एफ; }
foo.o: स्थिर भंडारण, एक अलग मेमोरी क्षेत्र में रहता है।f.o: स्वचालित भंडारण, स्टैक पर स्थित है।p->o : गतिशील भंडारण, ढेर पर आवंटित।
pf->o: f.o के समान ऑब्जेक्ट को इंगित करता है, जिसमें स्वचालित है भंडारण।struct Foo { Object o; }; Foo foo; int main() { Foo f; Foo* p = new Foo; Foo* pf = &f; }
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3