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