क्या स्टैक-आधारित भाषा में कचरा संग्रह की आवश्यकता है?


16

स्टैक-आधारित भाषा में कचरा संग्रह (GC) की क्या आवश्यकता है? की तरह एक भाषा में आगे या आरपीएल (पर हिमाचल प्रदेश कैलकुलेटर ), वहाँ कचरा संग्रहण के लिए एक की जरूरत है?

मुझे लगता है, क्योंकि आउटपुट स्टैक से अलग होता है, इसलिए इसकी कोई आवश्यकता नहीं होगी। क्या मैं कुछ भूल रहा हूँ?

जवाबों:


14

जीसी को आम तौर पर ढेर पर आवंटित मेमोरी पर लागू किया जाता है। मैं फोर्थ या आरपीएल से परिचित नहीं हूं, लेकिन अगर कोई ढेर नहीं है, और सब कुछ एक वैश्विक स्टैक पर संग्रहीत किया जाता है, तो जीसी के लिए कुछ भी नहीं करना है।


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

13

हाँ तुम सही हो। लेकिन स्टैक आधारितता पूरी कहानी का एक हिस्सा है। उदाहरण के लिए, जावा बाइटकोड दुभाषिया स्टैक-आधारित है (दक्षता के लिए - संकलित कोड काम करता है - अलग-अलग)। यह हमें बताता है, कि किसी भी भाषा को स्टैक भाषा में रूपांतरित किया जा सकता है।

स्टैक के बाहर की वस्तुएं क्या मायने रखती हैं, जो वर्तमान विधि निष्पादन को रेखांकित कर सकती हैं। जब तक भाषा में कुछ भी नहीं है mallocया newऐसा नहीं है, तब तक ऐसी कोई वस्तु नहीं है और आपको न तो deleteऔर न ही GC की आवश्यकता है ।

गतिशील मेमोरी आवंटन में कमी वाली भाषा इसकी उपयोगिता में काफी सीमित है।


निश्चित नहीं है कि मैं अंतिम पंक्ति से सहमत हूं, क्या जावा बायटेकोड उपयोगी नहीं है?
जे.के.

@jk।, java bytecode में डायनामिक मेमोरी एलोकेशन है।
पीटर टेलर

1
दरअसल, कई सामान्य-उद्देश्य वाली भाषाएं हैं जो स्टैक आधारित हैं। Factcode.org
Yam

1
वास्तव में कारक कचरा एकत्र किया जाता है
एंड्रिया

1

यदि भाषा गतिशील डेटा संरचनाओं का समर्थन करने जा रही है, तो कचरा संग्रहण आवश्यक है। यदि आप सी के स्तर से परे कुछ भी करना चाहते हैं, तो यह लगभग एक आवश्यकता है। इसके बिना आप केवल निश्चित आकार की डेटा संरचनाओं के साथ फंस जाते हैं और स्मृति को प्रबंधित करते हैं। यही कारण है कि मूल फोर्थ निश्चित रूप से करता है, लेकिन यह शायद ऐसा कुछ नहीं है जो आप आज करना चाहते हैं जब तक कि आपके केवल निम्न-स्तरीय सिस्टम कोडिंग नहीं कर रहे हैं।


1

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

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