2012-11-13 18 views
5

मैं वर्तमान में स्मृति सहित निम्न स्तर के आर्डिनो सामान के बारे में सीख रहा हूं। मेरा सवाल है क्योंकि मेमोरी के विपरीत तरफ ढेर और ढेर बढ़ते हैं, मेमोरी से बाहर होता है अगर दोनों बीच में कहीं मिलते हैं, या ऐसा होता है जब उनमें से एक बीच में हिट करता है।मेमोरी अवधारणाओं से बाहर

+7

यही कारण है कि वे अलग-अलग दिशाओं में बढ़ते हैं - जब तक वे वास्तव में टकराते हैं तब तक आप ठीक होते हैं। –

उत्तर

3
  • वहाँ का बोध भी नहीं है "मध्यम"
  • पर निर्भर करता है कि कैसे अंतर्निहित ऑपरेटिंग सिस्टम (किसी भी सब पर! अगर) प्रक्रियाओं का प्रबंधन करता है (यदि वहाँ मंच पर इस तरह के बात है !), स्टैक में सीमित आकार हो सकता है, "पूरी पूरी याददाश्त" से बहुत छोटा
  • अंतर्निहित ऑपरेटिंग सिस्टम (यदि कोई भी है!) वर्चुअल मेमोरी स्पेस का प्रबंधन करता है (यदि ऐसी कोई चीज़ है मंच!), ढेर का सीमित आकार हो सकता है, बहुत छोटा टी हन "बाकी की पूरी याददाश्त"

यदि इनमें से कोई भी सीमाएं मौजूद हैं, तो उन क्षेत्रों की एक-दूसरे की बैठक बहुत कम संभावना है। असल में, शायद वे जल्द ही अंतरिक्ष से बाहर हो जाएंगे, और गार्डिंग तंत्र सॉफ्टवेयर अपवादों के प्रासंगिक हार्डवेयर को बढ़ाएंगे।

इसका मतलब है कि 'स्मृति से बाहर' घटना एक बात नहीं है। ढेर में ओओएम है, और ओओएम ढेर में है। दुनिया के अपने हिस्सों में, परंपरागत रूप से, जो ढेर से संबंधित है उसे स्टैक ओवरफ्लो कहा जाता है :) और ढेर से संबंधित एक आउट आउट [हेप] मेमोरी है।

विशेष रूप से, यदि आपके प्लेटफ़ॉर्म में वर्चुअल मेमोरी की धारणा है, तो स्टैक सबसे अधिक संभवतः अंतरिक्ष का एकवचन ब्लॉक है, लेकिन ढेर - शायद एक दुर्लभ निर्माण होगा, और अंतरिक्ष के कई बिखरे हुए ब्लॉक होंगे, न कि कुछ आरोही या अवरोही तरीके से शारीरिक रूप से आदेश दिया गया है। ऐसे मामले में, कुछ भी बैठक करने के बारे में बात करना मुश्किल है। स्टैक ओवरफ्लो तब होता है जब स्टैक आकार सीमा को हिट करता है, और आउटऑफमेमरी तब होती है जब मेमोरी मैनेजर मेमोरी स्पेस में उपयुक्त फ्री होल नहीं पाता है।

वर्चुअल मेमोरी को अनदेखा करना, और अगर केवल 'कच्चे हार्डवेयर' के बारे में बात करना है, तो यह उस पर निर्भर करता है .. जहां स्टैक वास्तव में स्थित है। आईआईआरसी (!), कुछ (वास्तव में पुराने) प्लेटफॉर्म पर भौतिक स्मृति की शुरुआत में स्थित कुछ पूर्वनिर्धारित स्थान पर ढेर को रोक दिया गया था, आइए पहले दस पृष्ठ कहें, और 'नीचे तक' बढ़े। फिर हार्डवेयर मैप किए गए टेबल और पोर्ट स्टेट छवियों के कुछ पृष्ठ थे, और फिर शेष पूंछ ढेर था। इस तरह के सेटअप के साथ, स्टैक ओवरव्लो बढ़ता है जब स्टैक पॉइंटर शून्य तक पहुंच जाता है। यह काफी 'स्मार्ट' था क्योंकि प्रोसेसर की स्थिति झंडे के साथ शून्य का पता लगाना आसान है .. इसके अलावा, उन पुराने प्रोसेसर के लिए उच्चतर लोगों की तुलना में कम एड्रेस तक पहुंचना कहीं अधिक आसान था, इसलिए निचले एड्रेस में अक्सर एक्सेस किए गए ढेर को एक बड़ा प्लस था ।

आईआईआरसी (!), नए प्लेटफार्मों में उन समस्याओं (आमतौर पर, चलो NUMA और इसी तरह की चीजों को अनदेखा करते हैं), और वर्तमान पारंपरिक 'कच्चे हार्डवेयर' सेटअप अंतरिक्ष की शुरुआत में विशेष क्षेत्रों (तालिकाओं, पोर्टमैप्स, आदि) डालते हैं, फिर हीप, फिर ' मुक्त क्षेत्र 'तो स्टैक, और स्टैक ओवरफ्लो तब होता है जब मुक्त क्षेत्र समाप्त हो जाता है, वह तब होता है जब ढेर पहले से ही ढेर से किसी भी ब्लॉक को पूरा करता है। नोट, कि स्टैक ओवरफ्लो का अभी भी आउटऑफ मेमरी का मतलब नहीं है: स्टैक ओवरफ़्लो हो सकता है, लेकिन ढेर में कुछ अंतराल हो सकते हैं और अभी भी बहुत सी खाली जगह हो सकती है!

कृपया ध्यान रखें कि 'आईआईआरसी महत्वपूर्ण हैं। मैं Arduino और वर्तमान प्रोसेसर आर्किटेक्चर पर एक विशेषज्ञ नहीं हूं, और ऊपर 'ऐतिहासिक' blargh भी नए/पुराने क्या शब्दों में काफी दूर हो सकता है। मैं इसे सत्य होने के लिए 80% की संभावना देता हूं।

+0

जो कुछ वास्तविक प्रकाश डाला। धन्यवाद –

1

स्टैक का एक निश्चित आवंटित आकार है, और यदि आप उस आकार से आगे जाते हैं तो आपके पास एक स्टैक बफर ओवरफ़्लो होगा।

सॉफ़्टवेयर में, एक स्टैक ओवरफ़्लो तब होता है जब कॉल स्टैक पर बहुत अधिक मेमोरी का उपयोग किया जाता है। कॉल स्टैक में सीमित मात्रा में मेमोरी होती है, अक्सर प्रोग्राम की शुरुआत में निर्धारित होती है।

स्रोत Wikipedia

संबंधित मुद्दे