स्टैक बनाम हीप मेमोरी – उनके बीच अंतर
स्टैक और हीप मेमोरी के बीच मुख्य अंतर
- स्टैक एक रैखिक डेटा संरचना है जबकि हीप एक पदानुक्रमित डेटा संरचना है।
- स्टैक मेमोरी कभी भी खंडित नहीं होगी, जबकि हीप मेमोरी खंडित हो सकती है क्योंकि मेमोरी के ब्लॉक पहले आवंटित किए जाते हैं और फिर मुक्त किए जाते हैं।
- स्टैक केवल स्थानीय चरों तक ही पहुँचता है, जबकि हीप आपको वैश्विक स्तर पर चरों तक पहुँचने की अनुमति देता है।
- स्टैक वेरिएबल्स का आकार नहीं बदला जा सकता, जबकि हीप वेरिएबल्स का आकार बदला जा सकता है।
- स्टैक मेमोरी को एक सन्निहित ब्लॉक में आवंटित किया जाता है जबकि हीप मेमोरी को किसी भी यादृच्छिक क्रम में आवंटित किया जाता है।
- स्टैक में वेरिएबल्स को डी-एलोकेशन करने की आवश्यकता नहीं होती है, जबकि हीप में डी-एलोकेशन की आवश्यकता होती है।
- स्टैक आवंटन और डी-आबंटन कंपाइलर निर्देशों द्वारा किया जाता है जबकि हीप आवंटन और डी-आबंटन प्रोग्रामर द्वारा किया जाता है।
स्टैक क्या है?
स्टैक कंप्यूटर की मेमोरी का एक विशेष क्षेत्र है जो किसी फ़ंक्शन द्वारा बनाए गए अस्थायी चर को संग्रहीत करता है। स्टैक में, रनटाइम के दौरान चर घोषित, संग्रहीत और आरंभ किए जाते हैं।
यह एक अस्थायी भंडारण मेमोरी है। जब कंप्यूटिंग कार्य पूरा हो जाता है, तो चर की मेमोरी स्वचालित रूप से मिट जाएगी। स्टैक सेक्शन में ज्यादातर मेथड्स, लोकल वैरिएबल और रेफरेंस वैरिएबल होते हैं।
ढेर क्या है?
हीप एक मेमोरी है जिसका उपयोग प्रोग्रामिंग भाषाओं द्वारा वैश्विक चर को संग्रहीत करने के लिए किया जाता है। डिफ़ॉल्ट रूप से, सभी वैश्विक चर हीप मेमोरी स्पेस में संग्रहीत होते हैं। यह डायनेमिक मेमोरी आवंटन का समर्थन करता है।
हीप आपके लिए स्वचालित रूप से प्रबंधित नहीं होता है और CPU द्वारा भी इसका उतना कड़ाई से प्रबंधन नहीं किया जाता है। यह मेमोरी के एक मुक्त-फ़्लोटिंग क्षेत्र की तरह है।
स्टैक और हीप के बीच मुख्य अंतर
| प्राचल | धुआँरा | ढेर |
|---|---|---|
| डेटा संरचना के प्रकार | स्टैक एक रैखिक डेटा संरचना है। | हीप एक पदानुक्रमित डेटा संरचना है। |
| पहुंच की गति | उच्च गति का उपयोग | स्टैक की तुलना में धीमा |
| अंतरिक्ष प्रबंधन | ओएस द्वारा स्थान का कुशलतापूर्वक प्रबंधन किया जाता है, जिससे मेमोरी कभी खंडित नहीं होगी। | हीप स्पेस का कुशलतापूर्वक उपयोग नहीं किया जाता है। मेमोरी खंडित हो सकती है क्योंकि मेमोरी के ब्लॉक पहले आवंटित किए जाते हैं और फिर मुक्त किए जाते हैं। |
| पहुँच | केवल स्थानीय चर | यह आपको वैश्विक स्तर पर चरों तक पहुंचने की अनुमति देता है। |
| स्थान आकार की सीमा | स्टैक आकार की सीमा OS पर निर्भर करती है। | मेमोरी आकार पर कोई विशिष्ट सीमा नहीं है। |
| आकार बदलें | चरों का आकार बदला नहीं जा सकता | चरों का आकार बदला जा सकता है. |
| स्मृति आवंटन | मेमोरी को एक सन्निहित ब्लॉक में आवंटित किया जाता है। | मेमोरी किसी भी यादृच्छिक क्रम में आवंटित की जाती है। |
| आबंटन और विलोपन | संकलक निर्देशों द्वारा स्वचालित रूप से किया गया। | यह कार्य प्रोग्रामर द्वारा मैन्युअल रूप से किया जाता है। |
| आवंटन रद्द | चरों को डी-आबंटित करने की आवश्यकता नहीं है। | स्पष्ट रूप से आवंटन रद्द करने की आवश्यकता है। |
| लागत | Less | अधिक |
| कार्यान्वयन | स्टैक को 3 तरीकों से क्रियान्वित किया जा सकता है: सरल सारणी आधारित, गतिशील मेमोरी का उपयोग करके, और लिंक्ड सूची आधारित। | हीप को सारणी और वृक्षों का उपयोग करके क्रियान्वित किया जा सकता है। |
| मुख्य मुद्दा | स्मृति की कमी | स्मृति विखंडन |
| संदर्भ का स्थान | स्वचालित संकलन समय निर्देश. | पर्याप्त |
| लचीलापन | निश्चित आकार | आकार बदलना संभव है |
| पहूंच समय | तेज़ | और धीमा |
स्टैक का उपयोग करने के लाभ
स्टैक का उपयोग करने के लाभ/सुविधाएँ इस प्रकार हैं:
- यह आपको डेटा को अंतिम रूप से प्रथम बार में (LIFO) प्रबंधित करने में मदद करता है जो लिंक्ड सूची और सारणी के साथ संभव नहीं है।
- जब किसी फ़ंक्शन को कॉल किया जाता है तो स्थानीय चरों को स्टैक में संग्रहीत कर दिया जाता है, तथा वापस आने पर वे स्वचालित रूप से नष्ट हो जाते हैं।
- स्टैक का उपयोग तब किया जाता है जब किसी चर का उपयोग उस फ़ंक्शन के बाहर नहीं किया जाता है।
- यह आपको यह नियंत्रित करने की अनुमति देता है कि मेमोरी कैसे आवंटित और डी-आबंटित की जाए।
- स्टैक स्वचालित रूप से ऑब्जेक्ट को साफ़ कर देता है।
- आसानी से भ्रष्ट नहीं होता
- चरों का आकार बदला नहीं जा सकता.
हीप का उपयोग करने के लाभ
हीप मेमोरी का उपयोग करने के लाभ/पक्ष हैं:
- हीप आपको सबसे बड़ी और सबसे छोटी संख्या खोजने में मदद करता है
- ऑब्जेक्ट द्वारा प्रयुक्त मेमोरी को मुक्त करने के लिए कचरा संग्रहण हीप मेमोरी पर चलता है।
- हीप विधि का उपयोग प्राथमिकता कतार में भी किया जाता है।
- यह आपको वैश्विक स्तर पर चरों तक पहुंचने की अनुमति देता है।
- हीप में मेमोरी आकार की कोई सीमा नहीं होती।
स्टैक का उपयोग करने के नुकसान
स्टैक मेमोरी का उपयोग करने के नुकसान/कमियां हैं:
- स्टैक मेमोरी बहुत सीमित है.
- स्टैक पर बहुत अधिक ऑब्जेक्ट बनाने से स्टैक ओवरफ्लो का खतरा बढ़ सकता है।
- यादृच्छिक अभिगम संभव नहीं है.
- परिवर्तनीय भंडारण को अधिलेखित कर दिया जाएगा, जिसके कारण कभी-कभी फ़ंक्शन या प्रोग्राम का व्यवहार अपरिभाषित हो जाता है।
- स्टैक मेमोरी क्षेत्र के बाहर चला जाएगा, जिससे असामान्य समाप्ति हो सकती है।
हीप का उपयोग करने के नुकसान
हीप्स मेमोरी का उपयोग करने के नुकसान/कमी हैं:
- यह एक OS द्वारा प्रदान की जा सकने वाली अधिकतम मेमोरी प्रदान कर सकता है
- इसकी गणना में अधिक समय लगता है।
- हीप मेमोरी में मेमोरी प्रबंधन अधिक जटिल है क्योंकि इसका उपयोग वैश्विक स्तर पर किया जाता है।
- स्टैक की तुलना में इसके निष्पादन में बहुत अधिक समय लगता है।
हीप या स्टैक का उपयोग कब करें?
जब आपको मेमोरी का एक बड़ा ब्लॉक आवंटित करने की आवश्यकता होती है तो आपको हीप का उपयोग करना चाहिए। उदाहरण के लिए, आप एक बड़े आकार की सरणी या बड़ी संरचना बनाना चाहते हैं ताकि उस चर को लंबे समय तक रखा जा सके तो आपको इसे हीप पर आवंटित करना चाहिए।
हालाँकि, यदि आप अपेक्षाकृत छोटे चरों के साथ काम कर रहे हैं जो केवल तब तक आवश्यक हैं जब तक उनका उपयोग करने वाला फ़ंक्शन सक्रिय है। तब आपको स्टैक का उपयोग करने की आवश्यकता है, जो तेज़ और आसान है।



