मेमोरी हीप क्या है?


जवाबों:


234

मुमकिन है तुम्हारा मतलब ढेर देखने के एक स्मृति आवंटन बिंदु से, नहीं देखने के एक डेटा संरचना बिंदु से (शब्द अनेक अर्थ है)।

एक बहुत ही सरल व्याख्या यह है कि ढेर स्मृति का वह हिस्सा है जहाँ गतिशील रूप से आवंटित मेमोरी निवास करती है (अर्थात मेमोरी को आवंटित किया जाता है malloc)। निम्न में से एक होने तक हीप से आवंटित मेमोरी आवंटित की जाएगी:

  1. स्मृति free'd है
  2. कार्यक्रम समाप्त हो गया

यदि आवंटित मेमोरी के सभी संदर्भ खो गए हैं (जैसे कि आप एक पॉइंटर को अब और स्टोर नहीं करते हैं), तो आपके पास मेमोरी लीक कहा जाता है । यह वह जगह है जहां मेमोरी अभी भी आवंटित की गई है, लेकिन आपके पास अब इसे एक्सेस करने का कोई आसान तरीका नहीं है। लीक की गई मेमोरी को भविष्य के मेमोरी आवंटन के लिए पुनः प्राप्त नहीं किया जा सकता है, लेकिन जब प्रोग्राम समाप्त होता है तो मेमोरी ऑपरेटिंग सिस्टम द्वारा फ्री-होल्ड हो जाएगी।

स्टैक मेमोरी के साथ इसका विरोध करें जो वह स्थान है जहाँ स्थानीय चर (एक विधि के भीतर परिभाषित) रहते हैं। स्टैक पर आवंटित मेमोरी आमतौर पर केवल तब तक रहती है जब तक कि फ़ंक्शन वापस नहीं आता (इसमें कुछ अपवाद हैं, जैसे स्थैतिक स्थानीय चर)।

आप इस लेख में ढेर के बारे में अधिक जानकारी पा सकते हैं ।


3
स्थानीय चर एक स्टैक में कैसे रह सकते हैं? एक स्टैक केवल एक ही समय में एक बहुत विशिष्ट क्रम में एक चर लेने की अनुमति देता है। क्या होगा अगर मुझे स्टैक पर कहीं कम से एक स्थानीय चर की आवश्यकता है?
कोडिएगस्टीन

9
@ आईरे - एक सांख्यिकीय रूप से टाइप की गई भाषा में, स्थानीय मापदंडों के आकार को संकलन समय पर जाना जाता है। इसलिए स्थानीय वेरिएबल्स को सीधे एक एड्रेस ऑफसेट के जरिए स्टैक से सीधे एक्सेस किया जा सकता है। ऐसा करने के लिए स्टैक को पॉप करने की आवश्यकता नहीं है। देखें इस उत्तर अधिक जानकारी के लिए।
तेंदुएस्किनपिलबॉक्सहोट

17

एक मेमोरी हीप मेमोरी में एक स्थान है जहाँ मेमोरी को रैंडम एक्सेस पर आवंटित किया जा सकता है। स्टैक के
विपरीत जहां मेमोरी आवंटित की जाती है और एक बहुत ही परिभाषित क्रम में जारी की जाती है, ढेर पर आवंटित व्यक्तिगत डेटा तत्व आमतौर पर उन तरीकों से जारी किए जाते हैं जो एक दूसरे से अतुल्यकालिक हैं। ऐसे किसी भी डेटा तत्व को मुक्त कर दिया जाता है जब प्रोग्राम स्पष्ट रूप से संबंधित पॉइंटर को जारी करता है, और इसके परिणामस्वरूप खंडित ढेर हो सकता है। केवल शीर्ष पर डेटा (या नीचे के तरीके पर, स्टैक के काम करने के तरीके के आधार पर) जारी किया जा सकता है, जिसके परिणामस्वरूप डेटा तत्व को उन रिवर्स ऑर्डर में मुक्त किया जा रहा है जो उन्हें आवंटित किए गए थे।


9

हीप मात्र एक ऐसा क्षेत्र है, जहाँ स्मृति को बिना किसी आदेश के आवंटित या डील किया जाता है। यह तब होता है जब कोई newऑपरेटर या कुछ इसी तरह का उपयोग करके ऑब्जेक्ट बनाता है । यह स्टैक के विरोध में है जहां मेमोरी को अंतिम आउट आधार पर पहले से डील किया जाता है।



7

यह स्मृति प्रबंधक द्वारा एक प्रक्रिया द्वारा उपयोग की जाने वाली ऑपरेटिंग सिस्टम से आवंटित मेमोरी का एक हिस्सा है। malloc()एट अलिया को कॉल करता है, फिर ऑपरेटिंग सिस्टम से सीधे निपटने के बजाय इस हीप से मेमोरी लेता है।


7

आप शायद ढेर स्मृति का मतलब है, स्मृति ढेर नहीं।

हीप मेमोरी अनिवार्य रूप से मेमोरी का एक बड़ा पूल (आमतौर पर प्रति प्रक्रिया) है जिसमें से चल रहा कार्यक्रम चंक्स का अनुरोध कर सकता है। इसे आमतौर पर डायनेमिक एलोकेशन कहा जाता है ।

यह स्टैक से अलग है, जहां "स्वचालित चर" आवंटित किए जाते हैं। इसलिए, उदाहरण के लिए, जब आप C फ़ंक्शन को पॉइंटर चर में परिभाषित करते हैं, तो मेमोरी एड्रेस को होल्ड करने के लिए पर्याप्त स्थान स्टैक पर आवंटित किया जाता है। हालाँकि, आपको अक्सर डायनामिक रूप से आवंटित स्थान (मालॉक के साथ) को ढेर पर आवंटित करना होगा और फिर वह पता प्रदान करना होगा जहां यह मेमोरी पंक पॉइंटर से शुरू होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.