क्षेत्र आधारित स्मृति प्रबंधन: Difference between revisions

From Vigyanwiki
(Created page with "{{Use American English|date = February 2019}} {{Short description|Memory allocation scheme}} कंप्यूटर विज्ञान में, क्षेत्...")
 
No edit summary
Line 2: Line 2:


{{Short description|Memory allocation scheme}}
{{Short description|Memory allocation scheme}}
[[कंप्यूटर विज्ञान]] में, क्षेत्र-आधारित [[स्मृति प्रबंधन]] एक प्रकार का स्मृति प्रबंधन है जिसमें प्रत्येक आबंटित वस्तु को एक क्षेत्र को सौंपा जाता है। एक क्षेत्र, जिसे ज़ोन, अखाड़ा, क्षेत्र या स्मृति संदर्भ भी कहा जाता है, आवंटित वस्तुओं का एक संग्रह है जिसे एक ही बार में कुशलता से पुन: आवंटित या हटा दिया जा सकता है। स्टैक आवंटन की तरह, क्षेत्र कम ओवरहेड के साथ मेमोरी के आवंटन और डीलोकेशन की सुविधा प्रदान करते हैं; लेकिन वे अधिक लचीले होते हैं, जिससे वस्तुओं को उस [[स्टैक फ्रेम]] से अधिक समय तक जीवित रहने की अनुमति मिलती है जिसमें उन्हें आवंटित किया गया था। विशिष्ट कार्यान्वयन में, एक क्षेत्र में सभी वस्तुओं को मेमोरी पतों की एक सन्निहित श्रेणी में आवंटित किया जाता है, इसी तरह स्टैक फ्रेम को आम तौर पर आवंटित किया जाता है।
[[कंप्यूटर विज्ञान]] में, क्षेत्र-आधारित [[स्मृति प्रबंधन]] एक प्रकार का स्मृति प्रबंधन होता है जिसमें प्रत्येक आवंटित वस्तु एक क्षेत्र को आवंटित की जाती है। एक क्षेत्र, जिसे ज़ोन, अखाड़ा, क्षेत्र या स्मृति संदर्भ भी कहा जाता है, आवंटित वस्तुओं का एक संग्रह होता है, जो सभी को एक ही समय में पुनः आवंटित या अव्यवस्थापित किया जा सकता है। स्टैक आवंटन की तरह, क्षेत्र कम ओवरहेड के साथ स्मृति  के आवंटन और लेन-देन को सरल बनाने की सुविधा प्रदान करते हैं; लेकिन ये अधिक लचीले होते हैं, जिससे वस्तुओं को उस [[स्टैक फ्रेम]] से अधिक समय तक रहने की अनुमति देती है जिसमें उन्हें आवंटित किया गया था। विशिष्ट कार्यान्वयन में, एक क्षेत्र में सभी वस्तुओं को स्मृति  पतों के एकल समीपवर्ती श्रेणी में आवंटित किया जाता है, इसी प्रकार स्टैक फ्रेम को सामान्तया आवंटित किया जाता है।


== उदाहरण ==
== उदाहरण ==
Line 26: Line 26:
सरल स्पष्ट क्षेत्र लागू करने के लिए सरल हैं; निम्नलिखित विवरण हैनसन पर आधारित है।<ref name="hanson">
सरल स्पष्ट क्षेत्र लागू करने के लिए सरल हैं; निम्नलिखित विवरण हैनसन पर आधारित है।<ref name="hanson">
{{cite journal |last1=Hanson |first1=David R. |year=1989 |title=Fast allocation and deallocation of memory based on object lifetimes |journal=Software: Practice and Experience |volume=20 |issue=1 |pages=5–12 |url=http://www3.interscience.wiley.com/journal/113446436/abstract?CRETRY=1&SRETRY=0 |archive-url=https://archive.today/20121020025006/http://www3.interscience.wiley.com/journal/113446436/abstract?CRETRY=1&SRETRY=0 |url-status=dead |archive-date=2012-10-20 |doi=10.1002/spe.4380200104 |s2cid=8960945 }}
{{cite journal |last1=Hanson |first1=David R. |year=1989 |title=Fast allocation and deallocation of memory based on object lifetimes |journal=Software: Practice and Experience |volume=20 |issue=1 |pages=5–12 |url=http://www3.interscience.wiley.com/journal/113446436/abstract?CRETRY=1&SRETRY=0 |archive-url=https://archive.today/20121020025006/http://www3.interscience.wiley.com/journal/113446436/abstract?CRETRY=1&SRETRY=0 |url-status=dead |archive-date=2012-10-20 |doi=10.1002/spe.4380200104 |s2cid=8960945 }}
</ref> प्रत्येक क्षेत्र को मेमोरी के बड़े ब्लॉकों की एक लिंक्ड सूची के रूप में कार्यान्वित किया जाता है; प्रत्येक ब्लॉक इतना बड़ा होना चाहिए कि वह कई आबंटनों को पूरा कर सके। वर्तमान ब्लॉक ब्लॉक में अगली मुक्त स्थिति के लिए एक संकेतक रखता है, और यदि ब्लॉक भर जाता है, तो एक नया आवंटित किया जाता है और सूची में जोड़ा जाता है। जब क्षेत्र को हटा दिया जाता है, तो अगले मुक्त-स्थिति सूचक को पहले ब्लॉक की शुरुआत में रीसेट कर दिया जाता है, और अगले आवंटित क्षेत्र के लिए ब्लॉक की सूची का पुन: उपयोग किया जा सकता है। वैकल्पिक रूप से, जब किसी क्षेत्र को हटा दिया जाता है, तो उसके ब्लॉक की सूची को एक वैश्विक मुक्त सूची में जोड़ा जा सकता है, जिससे अन्य क्षेत्र बाद में नए ब्लॉक आवंटित कर सकते हैं। इस सरल योजना के किसी भी मामले में, क्षेत्रों में अलग-अलग वस्तुओं को हटाना संभव नहीं है।
</ref> प्रत्येक क्षेत्र को स्मृति  के बड़े ब्लॉकों की एक लिंक्ड सूची के रूप में कार्यान्वित किया जाता है; प्रत्येक ब्लॉक इतना बड़ा होना चाहिए कि वह कई आबंटनों को पूरा कर सके। वर्तमान ब्लॉक ब्लॉक में अगली मुक्त स्थिति के लिए एक संकेतक रखता है, और यदि ब्लॉक भर जाता है, तो एक नया आवंटित किया जाता है और सूची में जोड़ा जाता है। जब क्षेत्र को हटा दिया जाता है, तो अगले मुक्त-स्थिति सूचक को पहले ब्लॉक की शुरुआत में रीसेट कर दिया जाता है, और अगले आवंटित क्षेत्र के लिए ब्लॉक की सूची का पुन: उपयोग किया जा सकता है। वैकल्पिक रूप से, जब किसी क्षेत्र को हटा दिया जाता है, तो उसके ब्लॉक की सूची को एक वैश्विक मुक्त सूची में जोड़ा जा सकता है, जिससे अन्य क्षेत्र बाद में नए ब्लॉक आवंटित कर सकते हैं। इस सरल योजना के किसी भी मामले में, क्षेत्रों में अलग-अलग वस्तुओं को हटाना संभव नहीं है।


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


== इतिहास और अवधारणाएँ ==
== इतिहास और अवधारणाएँ ==
क्षेत्रों की मूल अवधारणा बहुत पुरानी है, पहली बार डगलस टी. रॉस के एईडी फ्री स्टोरेज पैकेज में 1967 की शुरुआत में दिखाई दी, जिसमें मेमोरी को ज़ोन के पदानुक्रम में विभाजित किया गया था; प्रत्येक क्षेत्र का अपना आवंटक था, और एक क्षेत्र को एक ही बार में मुक्त किया जा सकता था, जिससे क्षेत्रों को क्षेत्रों के रूप में प्रयोग करने योग्य बनाया जा सके।<ref>
क्षेत्रों की मूल अवधारणा बहुत पुरानी है, पहली बार डगलस टी. रॉस के एईडी फ्री स्टोरेज पैकेज में 1967 की शुरुआत में दिखाई दी, जिसमें स्मृति  को ज़ोन के पदानुक्रम में विभाजित किया गया था; प्रत्येक क्षेत्र का अपना आवंटक था, और एक क्षेत्र को एक ही बार में मुक्त किया जा सकता था, जिससे क्षेत्रों को क्षेत्रों के रूप में प्रयोग करने योग्य बनाया जा सके।<ref>
{{cite journal |last1=Ross |first1=Douglas |year=1967 |title=The AED free storage package |journal=Communications of the ACM |volume=10 |issue=8 |pages=481–492 |doi=10.1145/363534.363546 |s2cid=6572689 }}
{{cite journal |last1=Ross |first1=Douglas |year=1967 |title=The AED free storage package |journal=Communications of the ACM |volume=10 |issue=8 |pages=481–492 |doi=10.1145/363534.363546 |s2cid=6572689 }}
</ref> 1976 में, PL/I मानक में AREA डेटा प्रकार शामिल था।<ref>{{cite book|last=American National Standards Institute, inc.|title=अमेरिकन नेशनल स्टैंडर्ड प्रोग्रामिंग लैंग्वेज PL/I|year=1976}}</ref> 1990 में, हैनसन ने सी में स्पष्ट क्षेत्रों का प्रदर्शन किया (जिसे उन्होंने एरेनास कहा{{What|date=January 2022}}) प्रति आबंटित बाइट समय प्रदर्शन प्राप्त कर सकता है, यहां तक ​​कि सबसे तेजी से ज्ञात ढेर आवंटन तंत्र से भी बेहतर।<ref name="hanson" />कुछ शुरुआती सी-आधारित सॉफ़्टवेयर परियोजनाओं को डिज़ाइन करने में स्पष्ट क्षेत्र महत्वपूर्ण थे, जिनमें Apache HTTP सर्वर शामिल है, जो उन्हें पूल कहता है, और [[PostgreSQL]] डेटाबेस प्रबंधन प्रणाली, जो उन्हें मेमोरी संदर्भ कहते हैं।<ref>
</ref> 1976 में, PL/I मानक में AREA डेटा प्रकार शामिल था।<ref>{{cite book|last=American National Standards Institute, inc.|title=अमेरिकन नेशनल स्टैंडर्ड प्रोग्रामिंग लैंग्वेज PL/I|year=1976}}</ref> 1990 में, हैनसन ने सी में स्पष्ट क्षेत्रों का प्रदर्शन किया (जिसे उन्होंने एरेनास कहा{{What|date=January 2022}}) प्रति आवंटित बाइट समय प्रदर्शन प्राप्त कर सकता है, यहां तक ​​कि सबसे तेजी से ज्ञात ढेर आवंटन तंत्र से भी बेहतर।<ref name="hanson" />कुछ शुरुआती सी-आधारित सॉफ़्टवेयर परियोजनाओं को डिज़ाइन करने में स्पष्ट क्षेत्र महत्वपूर्ण थे, जिनमें Apache HTTP सर्वर शामिल है, जो उन्हें पूल कहता है, और [[PostgreSQL]] डेटाबेस प्रबंधन प्रणाली, जो उन्हें स्मृति  संदर्भ कहते हैं।<ref>
{{cite web |url=http://www.postgresql.org/docs/8.2/static/spi-memory.html |title=Section 41.3: Memory Management |author=2010 PostgreSQL Global Development Group |year=1996 |work=PostgreSQL 8.2.15 Documentation |accessdate=22 February 2010}}
{{cite web |url=http://www.postgresql.org/docs/8.2/static/spi-memory.html |title=Section 41.3: Memory Management |author=2010 PostgreSQL Global Development Group |year=1996 |work=PostgreSQL 8.2.15 Documentation |accessdate=22 February 2010}}
</ref> पारंपरिक हीप आवंटन की तरह, ये योजनाएँ मेमोरी सुरक्षा प्रदान नहीं करती हैं; एक प्रोग्रामर के लिए यह संभव है कि किसी क्षेत्र को [[लटकने वाला सूचक]] के माध्यम से हटाए जाने के बाद, या किसी क्षेत्र को हटाना भूल जाए, जिससे [[स्मृति रिसाव]] हो जाए।
</ref> पारंपरिक हीप आवंटन की तरह, ये योजनाएँ स्मृति  सुरक्षा प्रदान नहीं करती हैं; एक प्रोग्रामर के लिए यह संभव है कि किसी क्षेत्र को [[लटकने वाला सूचक]] के माध्यम से हटाए जाने के बाद, या किसी क्षेत्र को हटाना भूल जाए, जिससे [[स्मृति रिसाव]] हो जाए।


=== क्षेत्र अनुमान ===
=== क्षेत्र अनुमान ===
Line 56: Line 56:
{{cite techreport | title=Better Static Memory Management: Improving Region-Based Analysis of Higher-Order Languages | last1=Aiken |first1=Alex |author2=Manuel Fähndrich, Raph Levien | number=UCB/CSD-95-866 | institution=EECS Department, University of California, Berkeley | year=1995}} [http://citeseer.ist.psu.edu/124242.html On Citeseer]
{{cite techreport | title=Better Static Memory Management: Improving Region-Based Analysis of Higher-Order Languages | last1=Aiken |first1=Alex |author2=Manuel Fähndrich, Raph Levien | number=UCB/CSD-95-866 | institution=EECS Department, University of California, Berkeley | year=1995}} [http://citeseer.ist.psu.edu/124242.html On Citeseer]
</ref>
</ref>
इस विस्तारित लैम्ब्डा कैलकुस का उद्देश्य मशीन कोड में मानक एमएल प्रोग्रामों को संकलित करने के लिए एक सिद्ध मेमोरी-सुरक्षित इंटरमीडिएट प्रतिनिधित्व के रूप में सेवा करना था, लेकिन एक अनुवादक का निर्माण जो बड़े कार्यक्रमों पर अच्छे नतीजे देगा, कई व्यावहारिक सीमाओं का सामना करना पड़ा जिसे नए के साथ हल किया जाना था विश्लेषण, जिसमें पुनरावर्ती कॉल, [[टेल कॉल]] से निपटना और उन क्षेत्रों को समाप्त करना शामिल है जिनमें केवल एक मान होता है। यह काम 1995 में पूरा हुआ था<ref>
इस विस्तारित लैम्ब्डा कैलकुस का उद्देश्य मशीन कोड में मानक एमएल प्रोग्रामों को संकलित करने के लिए एक सिद्ध स्मृति -सुरक्षित इंटरमीडिएट प्रतिनिधित्व के रूप में सेवा करना था, लेकिन एक अनुवादक का निर्माण जो बड़े कार्यक्रमों पर अच्छे नतीजे देगा, कई व्यावहारिक सीमाओं का सामना करना पड़ा जिसे नए के साथ हल किया जाना था विश्लेषण, जिसमें पुनरावर्ती कॉल, [[टेल कॉल]] से निपटना और उन क्षेत्रों को समाप्त करना शामिल है जिनमें केवल एक मान होता है। यह काम 1995 में पूरा हुआ था<ref>
{{cite conference |url=http://portal.acm.org/citation.cfm?id=237721.237771 |title=From region inference to von Neumann machines via region representation inference |last1=Birkedal |first1=Lars |author-link1=Lars Birkedal |last2=Tofte |first2=Mads |author-link2=Mads Tofte |last3=Vejlstrup |first3=Magnus |author-link3=Magnus Vejlstrup |year=1996 |book-title=POPL '96: Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages |publisher=ACM |accessdate=22 February 2010 |pages=171&ndash;183 |location=New York, NY, USA |isbn=0-89791-769-3 |doi=10.1145/237721.237771}}
{{cite conference |url=http://portal.acm.org/citation.cfm?id=237721.237771 |title=From region inference to von Neumann machines via region representation inference |last1=Birkedal |first1=Lars |author-link1=Lars Birkedal |last2=Tofte |first2=Mads |author-link2=Mads Tofte |last3=Vejlstrup |first3=Magnus |author-link3=Magnus Vejlstrup |year=1996 |book-title=POPL '96: Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages |publisher=ACM |accessdate=22 February 2010 |pages=171&ndash;183 |location=New York, NY, USA |isbn=0-89791-769-3 |doi=10.1145/237721.237771}}
</ref> और एमएल किट में एकीकृत, कचरा संग्रह के स्थान पर क्षेत्र आवंटन के आधार पर एमएल का एक संस्करण। इसने मध्यम आकार के परीक्षण कार्यक्रमों पर दोनों के बीच प्रत्यक्ष तुलना की अनुमति दी, व्यापक रूप से अलग-अलग परिणाम देने वाले (10 गुना तेज और चार गुना धीमी गति से) यह इस बात पर निर्भर करता है कि कार्यक्रम क्षेत्र के अनुकूल कैसे था; हालाँकि, संकलन समय मिनटों के क्रम में था।<ref>
</ref> और एमएल किट में एकीकृत, कचरा संग्रह के स्थान पर क्षेत्र आवंटन के आधार पर एमएल का एक संस्करण। इसने मध्यम आकार के परीक्षण कार्यक्रमों पर दोनों के बीच प्रत्यक्ष तुलना की अनुमति दी, व्यापक रूप से अलग-अलग परिणाम देने वाले (10 गुना तेज और चार गुना धीमी गति से) यह इस बात पर निर्भर करता है कि कार्यक्रम क्षेत्र के अनुकूल कैसे था; हालाँकि, संकलन समय मिनटों के क्रम में था।<ref>
Line 91: Line 91:
* क्षेत्र [[जावा (प्रोग्रामिंग भाषा)]] के एक सबसेट के लिए लागू किए गए थे,<ref>
* क्षेत्र [[जावा (प्रोग्रामिंग भाषा)]] के एक सबसेट के लिए लागू किए गए थे,<ref>
{{Cite thesis |degree=Masters in Computer Science |title=Region-based memory management in Java |url=ftp://ftp.diku.dk/diku/semantics/papers/D-395.ps.gz |last=Christiansen |first=Morten V. |year=1998 |publisher=Department of Computer Science (DIKU), University of Copenhagen |accessdate=20 February 2010 }}{{dead link|date=April 2018 |bot=InternetArchiveBot |fix-attempted=yes }}
{{Cite thesis |degree=Masters in Computer Science |title=Region-based memory management in Java |url=ftp://ftp.diku.dk/diku/semantics/papers/D-395.ps.gz |last=Christiansen |first=Morten V. |year=1998 |publisher=Department of Computer Science (DIKU), University of Copenhagen |accessdate=20 February 2010 }}{{dead link|date=April 2018 |bot=InternetArchiveBot |fix-attempted=yes }}
</ref> और [[वास्तविक समय जावा]] में मेमोरी प्रबंधन का एक महत्वपूर्ण घटक बन गया, जो उन्हें ऑब्जेक्ट एनकैप्सुलेशन प्रदर्शित करने के लिए [[स्वामित्व प्रकार]]ों के साथ जोड़ता है और क्षेत्र डीलोकेशन पर रनटाइम चेक को समाप्त करता है।<ref>{{cite conference |url=http://www.cag.lcs.mit.edu/~rinard/paper/emsoft01.ps |title=रीयल-टाइम जावा के लिए स्कोप्ड मेमोरी का कार्यान्वयन|last1=Beebee |first1=William S. |last2=Rinard |first2=Martin C. |year=2001 |publisher=Springer-Verlag |location=London, UK |accessdate=22 February 2010 |book-title=EMSOFT '01: Proceedings of the First International Workshop on Embedded Software |pages=289&ndash;305 |isbn=3-540-42673-6 }}{{Dead link|date=February 2020 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref>
</ref> और [[वास्तविक समय जावा]] में स्मृति  प्रबंधन का एक महत्वपूर्ण घटक बन गया, जो उन्हें ऑब्जेक्ट एनकैप्सुलेशन प्रदर्शित करने के लिए [[स्वामित्व प्रकार]]ों के साथ जोड़ता है और क्षेत्र डीलोकेशन पर रनटाइम चेक को समाप्त करता है।<ref>{{cite conference |url=http://www.cag.lcs.mit.edu/~rinard/paper/emsoft01.ps |title=रीयल-टाइम जावा के लिए स्कोप्ड मेमोरी का कार्यान्वयन|last1=Beebee |first1=William S. |last2=Rinard |first2=Martin C. |year=2001 |publisher=Springer-Verlag |location=London, UK |accessdate=22 February 2010 |book-title=EMSOFT '01: Proceedings of the First International Workshop on Embedded Software |pages=289&ndash;305 |isbn=3-540-42673-6 }}{{Dead link|date=February 2020 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref>
{{cite techreport | title=A type system for safe region-based memory management in Real-Time Java | last1=Sălcianu |first1=Alexandru |author2=Chandrasekhar Boyapati, William Beebee, Jr., Martin Rinard |number=MIT-LCS-TR-869 | institution=MIT Laboratory for Computer Science |year=2003 |url=http://people.csail.mit.edu/rinard/techreport/MIT-LCS-TR-869.pdf}}
{{cite techreport | title=A type system for safe region-based memory management in Real-Time Java | last1=Sălcianu |first1=Alexandru |author2=Chandrasekhar Boyapati, William Beebee, Jr., Martin Rinard |number=MIT-LCS-TR-869 | institution=MIT Laboratory for Computer Science |year=2003 |url=http://people.csail.mit.edu/rinard/techreport/MIT-LCS-TR-869.pdf}}
</ref><ref>
</ref><ref>
Line 115: Line 115:
क्षेत्रों का उपयोग करने वाली प्रणालियाँ उन मुद्दों का अनुभव कर सकती हैं जहाँ क्षेत्र आवंटित होने से पहले बहुत बड़े हो जाते हैं और मृत डेटा का एक बड़ा हिस्सा होता है; इन्हें आमतौर पर लीक कहा जाता है (भले ही वे अंततः मुक्त हो जाते हैं)। लीक को खत्म करने में कार्यक्रम का पुनर्गठन शामिल हो सकता है, आमतौर पर नए, छोटे-जीवनकाल क्षेत्रों को पेश करके। इस प्रकार की समस्या को डिबग करना क्षेत्र अनुमान का उपयोग करने वाली प्रणालियों में विशेष रूप से कठिन है, जहां प्रोग्रामर को अंतर्निहित अनुमान एल्गोरिथ्म को समझना चाहिए, या समस्या का निदान करने के लिए वर्बोज़ मध्यवर्ती प्रतिनिधित्व की जांच करनी चाहिए। इस प्रकार के डेटा को प्रोग्राम में बदलाव किए बिना समयबद्ध तरीके से हटाने के लिए ट्रेसिंग कचरा संग्रहकर्ता अधिक प्रभावी होते हैं; यह हाइब्रिड क्षेत्र/जीसी सिस्टम के लिए एक औचित्य था।<ref name="hybrid"/>दूसरी ओर, कचरा संग्राहकों का पता लगाना सूक्ष्म लीक भी प्रदर्शित कर सकता है, यदि डेटा के संदर्भों को बनाए रखा जाता है जो फिर कभी उपयोग नहीं किया जाएगा।
क्षेत्रों का उपयोग करने वाली प्रणालियाँ उन मुद्दों का अनुभव कर सकती हैं जहाँ क्षेत्र आवंटित होने से पहले बहुत बड़े हो जाते हैं और मृत डेटा का एक बड़ा हिस्सा होता है; इन्हें आमतौर पर लीक कहा जाता है (भले ही वे अंततः मुक्त हो जाते हैं)। लीक को खत्म करने में कार्यक्रम का पुनर्गठन शामिल हो सकता है, आमतौर पर नए, छोटे-जीवनकाल क्षेत्रों को पेश करके। इस प्रकार की समस्या को डिबग करना क्षेत्र अनुमान का उपयोग करने वाली प्रणालियों में विशेष रूप से कठिन है, जहां प्रोग्रामर को अंतर्निहित अनुमान एल्गोरिथ्म को समझना चाहिए, या समस्या का निदान करने के लिए वर्बोज़ मध्यवर्ती प्रतिनिधित्व की जांच करनी चाहिए। इस प्रकार के डेटा को प्रोग्राम में बदलाव किए बिना समयबद्ध तरीके से हटाने के लिए ट्रेसिंग कचरा संग्रहकर्ता अधिक प्रभावी होते हैं; यह हाइब्रिड क्षेत्र/जीसी सिस्टम के लिए एक औचित्य था।<ref name="hybrid"/>दूसरी ओर, कचरा संग्राहकों का पता लगाना सूक्ष्म लीक भी प्रदर्शित कर सकता है, यदि डेटा के संदर्भों को बनाए रखा जाता है जो फिर कभी उपयोग नहीं किया जाएगा।


क्षेत्र-आधारित मेमोरी प्रबंधन तब सबसे अच्छा काम करता है जब क्षेत्रों की संख्या अपेक्षाकृत कम होती है और प्रत्येक में कई ऑब्जेक्ट होते हैं; ऐसे कार्यक्रम जिनमें कई विरल क्षेत्र होते हैं, [[आंतरिक विखंडन]] प्रदर्शित करेंगे, जिससे स्मृति की बर्बादी होगी और क्षेत्र प्रबंधन के लिए समय व्यतीत होगा। फिर से, क्षेत्र अनुमान की उपस्थिति में इस समस्या का निदान करना अधिक कठिन हो सकता है।
क्षेत्र-आधारित स्मृति  प्रबंधन तब सबसे अच्छा काम करता है जब क्षेत्रों की संख्या अपेक्षाकृत कम होती है और प्रत्येक में कई ऑब्जेक्ट होते हैं; ऐसे कार्यक्रम जिनमें कई विरल क्षेत्र होते हैं, [[आंतरिक विखंडन]] प्रदर्शित करेंगे, जिससे स्मृति की बर्बादी होगी और क्षेत्र प्रबंधन के लिए समय व्यतीत होगा। फिर से, क्षेत्र अनुमान की उपस्थिति में इस समस्या का निदान करना अधिक कठिन हो सकता है।


== हाइब्रिड तरीके ==
== हाइब्रिड तरीके ==

Revision as of 22:01, 25 December 2022

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

उदाहरण

एक सरल उदाहरण के रूप में, निम्नलिखित सी (प्रोग्रामिंग भाषा) कोड पर विचार करें जो एक लिंक्ड सूची डेटा संरचना आवंटित करता है और फिर हटा देता है:

<वाक्यविन्यास प्रकाश लैंग = सी> क्षेत्र * आर = createRegion (); लिस्टनोड * हेड = न्यूल; के लिए (int i = 1; i <= 1000; i++) {

   लिस्टनोड * न्यूनोड = एलोकेटफ्रॉम रीजन (आर, साइजोफ (लिस्टनोड));
   नया नोड-> अगला = सिर;
   सिर = नया नोड;

} // ... // (यहां सूची का उपयोग करें) // ... नष्ट क्षेत्र (आर); </वाक्यविन्यास हाइलाइट>

हालाँकि इसे लिंक की गई सूची बनाने के लिए कई ऑपरेशनों की आवश्यकता होती है, लेकिन जिस क्षेत्र में नोड्स आवंटित किए गए थे, उसे नष्ट करके इसे एक ही ऑपरेशन में जल्दी से हटाया जा सकता है। सूची को पार करने की कोई आवश्यकता नहीं है।

कार्यान्वयन

सरल स्पष्ट क्षेत्र लागू करने के लिए सरल हैं; निम्नलिखित विवरण हैनसन पर आधारित है।[1] प्रत्येक क्षेत्र को स्मृति के बड़े ब्लॉकों की एक लिंक्ड सूची के रूप में कार्यान्वित किया जाता है; प्रत्येक ब्लॉक इतना बड़ा होना चाहिए कि वह कई आबंटनों को पूरा कर सके। वर्तमान ब्लॉक ब्लॉक में अगली मुक्त स्थिति के लिए एक संकेतक रखता है, और यदि ब्लॉक भर जाता है, तो एक नया आवंटित किया जाता है और सूची में जोड़ा जाता है। जब क्षेत्र को हटा दिया जाता है, तो अगले मुक्त-स्थिति सूचक को पहले ब्लॉक की शुरुआत में रीसेट कर दिया जाता है, और अगले आवंटित क्षेत्र के लिए ब्लॉक की सूची का पुन: उपयोग किया जा सकता है। वैकल्पिक रूप से, जब किसी क्षेत्र को हटा दिया जाता है, तो उसके ब्लॉक की सूची को एक वैश्विक मुक्त सूची में जोड़ा जा सकता है, जिससे अन्य क्षेत्र बाद में नए ब्लॉक आवंटित कर सकते हैं। इस सरल योजना के किसी भी मामले में, क्षेत्रों में अलग-अलग वस्तुओं को हटाना संभव नहीं है।

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

इतिहास और अवधारणाएँ

क्षेत्रों की मूल अवधारणा बहुत पुरानी है, पहली बार डगलस टी. रॉस के एईडी फ्री स्टोरेज पैकेज में 1967 की शुरुआत में दिखाई दी, जिसमें स्मृति को ज़ोन के पदानुक्रम में विभाजित किया गया था; प्रत्येक क्षेत्र का अपना आवंटक था, और एक क्षेत्र को एक ही बार में मुक्त किया जा सकता था, जिससे क्षेत्रों को क्षेत्रों के रूप में प्रयोग करने योग्य बनाया जा सके।[2] 1976 में, PL/I मानक में AREA डेटा प्रकार शामिल था।[3] 1990 में, हैनसन ने सी में स्पष्ट क्षेत्रों का प्रदर्शन किया (जिसे उन्होंने एरेनास कहा[clarification needed]) प्रति आवंटित बाइट समय प्रदर्शन प्राप्त कर सकता है, यहां तक ​​कि सबसे तेजी से ज्ञात ढेर आवंटन तंत्र से भी बेहतर।[1]कुछ शुरुआती सी-आधारित सॉफ़्टवेयर परियोजनाओं को डिज़ाइन करने में स्पष्ट क्षेत्र महत्वपूर्ण थे, जिनमें Apache HTTP सर्वर शामिल है, जो उन्हें पूल कहता है, और PostgreSQL डेटाबेस प्रबंधन प्रणाली, जो उन्हें स्मृति संदर्भ कहते हैं।[4] पारंपरिक हीप आवंटन की तरह, ये योजनाएँ स्मृति सुरक्षा प्रदान नहीं करती हैं; एक प्रोग्रामर के लिए यह संभव है कि किसी क्षेत्र को लटकने वाला सूचक के माध्यम से हटाए जाने के बाद, या किसी क्षेत्र को हटाना भूल जाए, जिससे स्मृति रिसाव हो जाए।

क्षेत्र अनुमान

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

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

1994 में, इस काम को टॉफ़्टे और तलपिन द्वारा टाइप बहुरूपता और मानक एमएल में उच्च-क्रम के कार्यों का समर्थन करने के लिए एक मौलिक कार्य में सामान्यीकृत किया गया था, जो एक कार्यात्मक प्रोग्रामिंग भाषा है, जो प्रकार के अनुमान और बहुरूपी क्षेत्र के प्रकारों की सैद्धांतिक अवधारणाओं के आधार पर एक अलग एल्गोरिथ्म का उपयोग करती है। क्षेत्र की गणना[6][7] उनके काम ने क्षेत्रों सहित लैम्ब्डा कैलकुस का विस्तार पेश किया, जिसमें दो निर्माण शामिल थे:

1 ρ पर: अभिव्यक्ति ई के परिणाम की गणना करें1 और इसे क्षेत्र पी में स्टोर करें?
letregion ρ ई में2 अंत: एक क्षेत्र बनाएँ और इसे ρ से बाइंड करें; ई का मूल्यांकन करें2; फिर क्षेत्र को हटा दें।

इस वाक्यात्मक संरचना के कारण, क्षेत्र नेस्टेड हैं, जिसका अर्थ है कि यदि r2 आर के बाद बनाया गया है1, इसे r से पहले भी आवंटित किया जाना चाहिए1; परिणाम क्षेत्रों का ढेर है। इसके अलावा, क्षेत्रों को उसी कार्य में हटा दिया जाना चाहिए जिसमें वे बनाए गए हैं। ऐकेन एट अल द्वारा इन प्रतिबंधों में ढील दी गई थी।[8] इस विस्तारित लैम्ब्डा कैलकुस का उद्देश्य मशीन कोड में मानक एमएल प्रोग्रामों को संकलित करने के लिए एक सिद्ध स्मृति -सुरक्षित इंटरमीडिएट प्रतिनिधित्व के रूप में सेवा करना था, लेकिन एक अनुवादक का निर्माण जो बड़े कार्यक्रमों पर अच्छे नतीजे देगा, कई व्यावहारिक सीमाओं का सामना करना पड़ा जिसे नए के साथ हल किया जाना था विश्लेषण, जिसमें पुनरावर्ती कॉल, टेल कॉल से निपटना और उन क्षेत्रों को समाप्त करना शामिल है जिनमें केवल एक मान होता है। यह काम 1995 में पूरा हुआ था[9] और एमएल किट में एकीकृत, कचरा संग्रह के स्थान पर क्षेत्र आवंटन के आधार पर एमएल का एक संस्करण। इसने मध्यम आकार के परीक्षण कार्यक्रमों पर दोनों के बीच प्रत्यक्ष तुलना की अनुमति दी, व्यापक रूप से अलग-अलग परिणाम देने वाले (10 गुना तेज और चार गुना धीमी गति से) यह इस बात पर निर्भर करता है कि कार्यक्रम क्षेत्र के अनुकूल कैसे था; हालाँकि, संकलन समय मिनटों के क्रम में था।[10] एमएल किट को अंततः दो परिवर्धन के साथ बड़े अनुप्रयोगों में बढ़ाया गया था: मॉड्यूल के अलग-अलग संकलन के लिए एक योजना, और कचरा संग्रह का पता लगाने के साथ क्षेत्र अनुमान के संयोजन वाली एक संकर तकनीक।[11][12]


नई भाषा वातावरण के लिए सामान्यीकरण

एमएल किट के विकास के बाद, क्षेत्रों को अन्य भाषा परिवेशों के लिए सामान्यीकृत किया जाने लगा:

  • सी प्रोग्रामिंग भाषा के विभिन्न विस्तार:
    • सुरक्षित सी बोली चक्रवात (प्रोग्रामिंग भाषा), जो कई अन्य सुविधाओं के बीच स्पष्ट क्षेत्रों के लिए समर्थन जोड़ती है, और मौजूदा सी अनुप्रयोगों को उपयोग करने के लिए माइग्रेट करने के प्रभाव का मूल्यांकन करती है।[13][14][15]
    • सी के विस्तार को आरसी कहा जाता है[16] लागू किया गया था जो स्पष्ट रूप से प्रबंधित क्षेत्रों का उपयोग करता है, लेकिन स्मृति सुरक्षा की गारंटी के लिए क्षेत्रों पर संदर्भ गणना का भी उपयोग करता है ताकि यह सुनिश्चित किया जा सके कि कोई भी क्षेत्र समय से पहले मुक्त न हो।[17][18] क्षेत्र संदर्भ गिनती के ओवरहेड को कम करते हैं, क्योंकि क्षेत्रों के आंतरिक संदर्भों को संशोधित होने पर अद्यतन करने की आवश्यकता नहीं होती है। आरसी में क्षेत्रों के लिए एक स्पष्ट स्थिर प्रकार प्रणाली शामिल है जो कुछ संदर्भ गणना अद्यतनों को समाप्त करने की अनुमति देती है।[19]
    • सी का एक प्रतिबंध जिसे कंट्रोल-सी कहा जाता है, स्मृति सुरक्षा सुनिश्चित करने के लिए इसके डिजाइन के हिस्से के रूप में क्षेत्रों (और एक समय में केवल एक क्षेत्र) का उपयोग करने के लिए कार्यक्रमों को सीमित करता है।[20]
  • क्षेत्र जावा (प्रोग्रामिंग भाषा) के एक सबसेट के लिए लागू किए गए थे,[21] और वास्तविक समय जावा में स्मृति प्रबंधन का एक महत्वपूर्ण घटक बन गया, जो उन्हें ऑब्जेक्ट एनकैप्सुलेशन प्रदर्शित करने के लिए स्वामित्व प्रकारों के साथ जोड़ता है और क्षेत्र डीलोकेशन पर रनटाइम चेक को समाप्त करता है।[22][23][24] हाल ही में, एम्बेडेड रीयल-टाइम जावा अनुप्रयोगों में क्षेत्रों का अनुमान लगाने के लिए एक अर्ध-स्वचालित प्रणाली प्रस्तावित की गई थी, जिसमें एक संकलन-समय स्थिर विश्लेषण, एक रनटाइम क्षेत्र आवंटन नीति और प्रोग्रामर संकेत शामिल थे।[25][26] क्षेत्र रीयल-टाइम कंप्यूटिंग के लिए उपयुक्त हैं क्योंकि वृद्धिशील कचरा संग्रह की जटिलता के बिना उनका समय ओवरहेड स्थिर रूप से अनुमानित है।
  • उन्हें तर्क प्रोग्रामिंग लैंग्वेज प्रोलॉग के लिए लागू किया गया था[27][28] और बुध प्रोग्रामिंग भाषा[29][30] बैकट्रैकिंग और कट्स का समर्थन करने के लिए टॉफ़्टे और तलपिन के क्षेत्र अनुमान मॉडल का विस्तार करके।
  • क्षेत्र-आधारित भंडारण प्रबंधन का उपयोग समानांतर प्रोग्रामिंग भाषा पैरासेल (प्रोग्रामिंग भाषा) में किया जाता है। पैरासेल में स्पष्ट संकेतकों की कमी के कारण,[31] संदर्भ गणना की कोई आवश्यकता नहीं है।

नुकसान

क्षेत्रों का उपयोग करने वाली प्रणालियाँ उन मुद्दों का अनुभव कर सकती हैं जहाँ क्षेत्र आवंटित होने से पहले बहुत बड़े हो जाते हैं और मृत डेटा का एक बड़ा हिस्सा होता है; इन्हें आमतौर पर लीक कहा जाता है (भले ही वे अंततः मुक्त हो जाते हैं)। लीक को खत्म करने में कार्यक्रम का पुनर्गठन शामिल हो सकता है, आमतौर पर नए, छोटे-जीवनकाल क्षेत्रों को पेश करके। इस प्रकार की समस्या को डिबग करना क्षेत्र अनुमान का उपयोग करने वाली प्रणालियों में विशेष रूप से कठिन है, जहां प्रोग्रामर को अंतर्निहित अनुमान एल्गोरिथ्म को समझना चाहिए, या समस्या का निदान करने के लिए वर्बोज़ मध्यवर्ती प्रतिनिधित्व की जांच करनी चाहिए। इस प्रकार के डेटा को प्रोग्राम में बदलाव किए बिना समयबद्ध तरीके से हटाने के लिए ट्रेसिंग कचरा संग्रहकर्ता अधिक प्रभावी होते हैं; यह हाइब्रिड क्षेत्र/जीसी सिस्टम के लिए एक औचित्य था।[11]दूसरी ओर, कचरा संग्राहकों का पता लगाना सूक्ष्म लीक भी प्रदर्शित कर सकता है, यदि डेटा के संदर्भों को बनाए रखा जाता है जो फिर कभी उपयोग नहीं किया जाएगा।

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

हाइब्रिड तरीके

जैसा कि ऊपर उल्लेख किया गया है, आरसी क्षेत्रों और संदर्भ गिनती के एक संकर का उपयोग करता है, संदर्भ गणना के ऊपरी हिस्से को सीमित करता है क्योंकि संदर्भ आंतरिक क्षेत्रों को संशोधित होने पर गिनती को अद्यतन करने की आवश्यकता नहीं होती है। इसी तरह, कुछ मार्क-क्षेत्र हाइब्रिड विधियाँ क्षेत्रों के साथ कचरा संग्रहण का पता लगाती हैं; ढेर को क्षेत्रों में विभाजित करके ये कार्य करते हैं, एक मार्क-स्वीप पास करते हैं जिसमें जीवित वस्तुओं वाले किसी भी क्षेत्र को चिह्नित किया जाता है, और फिर किसी भी अचिह्नित क्षेत्र को मुक्त किया जाता है। इन्हें प्रभावी बने रहने के लिए लगातार डीफ़्रेग्मेंटेशन की आवश्यकता होती है।[32]


इस पेज में लापता आंतरिक लिंक की सूची

  • ढेर आवंटन
  • अपाचे HTTP सर्वर
  • स्मृति सुरक्षा
  • उच्च-क्रम समारोह
  • बहुरूपता टाइप करें
  • अनुमान टाइप करें
  • क्षेत्र प्रकार
  • लैम्ब्डा कैलकुलस
  • मध्यवर्ती प्रतिनिधित्व
  • संदर्भ गिनती
  • कचरा संग्रह का पता लगाना

संदर्भ

  1. 1.0 1.1 Hanson, David R. (1989). "Fast allocation and deallocation of memory based on object lifetimes". Software: Practice and Experience. 20 (1): 5–12. doi:10.1002/spe.4380200104. S2CID 8960945. Archived from the original on 2012-10-20.
  2. Ross, Douglas (1967). "The AED free storage package". Communications of the ACM. 10 (8): 481–492. doi:10.1145/363534.363546. S2CID 6572689.
  3. American National Standards Institute, inc. (1976). अमेरिकन नेशनल स्टैंडर्ड प्रोग्रामिंग लैंग्वेज PL/I.
  4. 2010 PostgreSQL Global Development Group (1996). "Section 41.3: Memory Management". PostgreSQL 8.2.15 Documentation. Retrieved 22 February 2010.
  5. Ruggieri, Cristina; Murtagh, Thomas P. (1988). "Lifetime analysis of dynamically allocated objects". POPL '88: Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. doi:10.1145/73560.73585. Retrieved 22 February 2010.
  6. Tofte, Mads; Jean-Pierre Talpin (1993). A Theory of Stack Allocation in Polymorphically Typed Languages (Technical report). Department of Computer Science, Copenhagen University. 93/15. On Citeseer
  7. Tofte, Mads; Talpin, Jean-Pierre (1994). "Implementation of the Typed Call-by-Value λ-calculus using a Stack of Regions". POPL '94: Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. pp. 188–201. doi:10.1145/174675.177855. ISBN 0-89791-636-0. Retrieved 15 April 2014.
  8. Aiken, Alex; Manuel Fähndrich, Raph Levien (1995). Better Static Memory Management: Improving Region-Based Analysis of Higher-Order Languages (Technical report). EECS Department, University of California, Berkeley. UCB/CSD-95-866. On Citeseer
  9. Birkedal, Lars; Tofte, Mads; Vejlstrup, Magnus (1996). "From region inference to von Neumann machines via region representation inference". POPL '96: Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages. New York, NY, USA: ACM. pp. 171–183. doi:10.1145/237721.237771. ISBN 0-89791-769-3. Retrieved 22 February 2010.
  10. Tofte, Mads; Birkedal, Lars; Elsman, Martin; Hallenberg, Niels (2004). "A Retrospective on Region-Based Memory Management". Higher Order Symbolic Computing. 17 (3): 245–265. doi:10.1023/B:LISP.0000029446.78563.a4. ISSN 1388-3690.
  11. 11.0 11.1 Hallenberg, Niels; Elsman, Martin; Tofte, Mads (2003). "Combining region inference and garbage collection". SIGPLAN Notices. 37 (5): 141–152. doi:10.1145/543552.512547. ISSN 0362-1340.
  12. Elsman, Martin (2003). "Garbage collection safety for region-based memory management". SIGPLAN Notices. 38 (3): 123–134. CiteSeerX 10.1.1.57.8914. doi:10.1145/640136.604190. ISSN 0362-1340.
  13. "Cyclone: Introduction to Regions". Cyclone User Manual. Retrieved 22 February 2010.
  14. Grossman, Dan; Morrisett, Greg; Jim, Trevor; Hicks, Michael; Wang, Yanling (2002). "Region-based memory management in cyclone". SIGPLAN Notices. 37 (5): 282–293. doi:10.1145/543552.512563.
  15. Hicks, Michael; Morrisett, Greg; Grossman, Dan (2004). "Experience with safe manual memory-management in cyclone". ISMM '04: Proceedings of the 4th international symposium on Memory management. New York, NY, USA: ACM. pp. 73–84. doi:10.1145/1029873.1029883. ISBN 1-58113-945-4. Retrieved 22 February 2010.
  16. Gay, David (1999). "आरसी - सी के लिए सुरक्षित, क्षेत्र आधारित स्मृति प्रबंधन". David Gay's homepage. Intel Labs Berkeley. Archived from the original on February 26, 2009. Retrieved 22 February 2010.
  17. Gay, David; Aiken, Alex (1998). "Memory management with explicit regions". PLDI '98: Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation. New York, NY, USA: ACM. pp. 313–323. doi:10.1145/277650.277748. ISBN 0-89791-987-4. Retrieved 22 February 2010.
  18. Gay, David Edward (2001). Memory management with explicit regions (PDF) (PhD in Computer Science thesis). University of California at Berkeley. Retrieved 20 February 2010.
  19. Gay, David; Aiken, Alex (2001). "Language support for regions". SIGPLAN Notices. 36 (5): 70–80. CiteSeerX 10.1.1.650.721. doi:10.1145/381694.378815. ISSN 0362-1340.
  20. Kowshik, Sumant; Dhurjati, Dinakar; Adve, Vikram (2002). "Ensuring code safety without runtime checks for real-time control systems". CASES '02: Proceedings of the 2002 international conference on Compilers, architecture, and synthesis for embedded systems. New York, NY, USA: ACM. pp. 288–297. doi:10.1145/581630.581678. ISBN 1-58113-575-0. Retrieved 22 February 2010.
  21. Christiansen, Morten V. (1998). Region-based memory management in Java (Masters in Computer Science thesis). Department of Computer Science (DIKU), University of Copenhagen. Retrieved 20 February 2010.[permanent dead link]
  22. Beebee, William S.; Rinard, Martin C. (2001). "रीयल-टाइम जावा के लिए स्कोप्ड मेमोरी का कार्यान्वयन". EMSOFT '01: Proceedings of the First International Workshop on Embedded Software. London, UK: Springer-Verlag. pp. 289–305. ISBN 3-540-42673-6. Retrieved 22 February 2010.[permanent dead link]
  23. Sălcianu, Alexandru; Chandrasekhar Boyapati, William Beebee, Jr., Martin Rinard (2003). A type system for safe region-based memory management in Real-Time Java (PDF) (Technical report). MIT Laboratory for Computer Science. MIT-LCS-TR-869.{{cite tech report}}: CS1 maint: multiple names: authors list (link)
  24. Boyapati, Chandrasekhar; Salcianu, Alexandru; Beebee, Jr., William (2003). "Ownership types for safe region-based memory management in real-time Java". PLDI '03: Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation. New York, NY, USA: ACM. pp. 324–337. doi:10.1145/781131.781168. ISBN 1-58113-662-5. Retrieved 22 February 2010.
  25. Nahkli, Chaker; Rippert, Christophe; Salagnac, Guillaume; Yovine, Sergio (2007). "Efficient region-based memory management for resource-limited real-time embedded systems" (PDF). Proceedings of "Workshop on Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS'2006)". Retrieved 22 February 2010.
  26. Salagnac, Guillaume; Rippert, Christophe (2007). "Semi-Automatic Region-Based Memory Management for Real-Time Java Embedded Systems". RTCSA '07: Proceedings of the 13th IEEE International Conference on Embedded and Real-Time Computing Systems and Applications. Washington, DC, USA: IEEE Computer Society. pp. 73–80. doi:10.1109/RTCSA.2007.67. ISBN 978-0-7695-2975-2.
  27. Makholm, Henning (2000). Region-based memory management in Prolog (PDF) (Masters in Computer Science thesis). University of Copenhagen, Denmark. Archived from the original (PDF) on 5 June 2011. Retrieved 20 February 2010.
  28. Makholm, Henning (2000). "A region-based memory manager for prolog". ISMM '00: Proceedings of the 2nd international symposium on Memory management. New York, NY, USA: ACM. pp. 25–34. doi:10.1145/362422.362434. ISBN 1-58113-263-8. Retrieved 22 February 2010.
  29. Phan, Quan; Janssens, Gerda (2007). Static region analysis for Mercury. pp. 317–332. doi:10.1007/978-3-540-74610-2. ISBN 978-3-540-74608-9. ISSN 1611-3349. {{cite book}}: |journal= ignored (help)
  30. Phan, Quan; Somogyi, Zoltan (2008). "Runtime support for region-based memory management in Mercury". ISMM '08: Proceedings of the 7th international symposium on Memory management. New York, NY, USA: ACM. pp. 61–70. doi:10.1145/1375634.1375644. ISBN 978-1-60558-134-7. Retrieved 15 April 2014.
  31. Taft, Tucker (2012). "A Pointer-Free path to Object Oriented Parallel Programming". ParaSail blog. Retrieved 14 September 2012.
  32. Blackburn, Stephen M.; McKinley, Kathryn S. (2008). "Immix: a mark-region garbage collector with space efficiency, fast collection, and mutator performance". PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation. New York, NY, USA: ACM. pp. 22–32. doi:10.1145/1375581.1375586. ISBN 978-1-59593-860-2. Retrieved 15 April 2014.