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

From Vigyanwiki
No edit summary
 
(4 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Use American English|date = February 2019}}
[[कंप्यूटर विज्ञान]] में, क्षेत्र-आधारित [[स्मृति प्रबंधन]] एक प्रकार का स्मृति प्रबंधन होता है जिसमें प्रत्येक आवंटित वस्तु एक क्षेत्र को आवंटित की जाती है। एक क्षेत्र, जिसे ज़ोन, अखाड़ा, क्षेत्र या स्मृति संदर्भ भी कहा जाता है, आवंटित वस्तुओं का एक संग्रह होता है, जो सभी को एक ही समय में पुनः आवंटित या अव्यवस्थापित किया जा सकता है। स्टैक आवंटन की तरह, क्षेत्र कम ओवरहेड के साथ स्मृति के आवंटन और लेन-देन को सरल बनाने की सुविधा प्रदान करते हैं; लेकिन ये अधिक लचीले होते हैं, जिससे वस्तुओं को उस [[स्टैक फ्रेम]] से अधिक समय तक रहने की अनुमति देती है जिसमें उन्हें आवंटित किया गया था। विशिष्ट कार्यान्वयन में, एक क्षेत्र में सभी वस्तुओं को स्मृति पतों के एकल समीपवर्ती श्रेणी में आवंटित किया जाता है, इसी प्रकार स्टैक फ्रेम को सामान्यतः आवंटित किया जाता है।
 
{{Short description|Memory allocation scheme}}
[[कंप्यूटर विज्ञान]] में, क्षेत्र-आधारित [[स्मृति प्रबंधन]] एक प्रकार का स्मृति प्रबंधन होता है जिसमें प्रत्येक आवंटित वस्तु एक क्षेत्र को आवंटित की जाती है। एक क्षेत्र, जिसे ज़ोन, अखाड़ा, क्षेत्र या स्मृति संदर्भ भी कहा जाता है, आवंटित वस्तुओं का एक संग्रह होता है, जो सभी को एक ही समय में पुनः आवंटित या अव्यवस्थापित किया जा सकता है। स्टैक आवंटन की तरह, क्षेत्र कम ओवरहेड के साथ स्मृति के आवंटन और लेन-देन को सरल बनाने की सुविधा प्रदान करते हैं; लेकिन ये अधिक लचीले होते हैं, जिससे वस्तुओं को उस [[स्टैक फ्रेम]] से अधिक समय तक रहने की अनुमति देती है जिसमें उन्हें आवंटित किया गया था। विशिष्ट कार्यान्वयन में, एक क्षेत्र में सभी वस्तुओं को स्मृति पतों के एकल समीपवर्ती श्रेणी में आवंटित किया जाता है, इसी प्रकार स्टैक फ्रेम को सामान्तया आवंटित किया जाता है।


== उदाहरण ==
== उदाहरण ==
Line 18: Line 15:
  destroyRegion(r);
  destroyRegion(r);


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


== कार्यान्वयन ==
== कार्यान्वयन ==
सरल स्पष्ट क्षेत्रों को लागू करने के लिए सीधा है; निम्नलिखित विवरण हंसन पर आधारित है।<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 में, पीएल/आई मानक में क्षेत्र डेटा प्रकार सम्मिलित था।<ref>{{cite book|last=American National Standards Institute, inc.|title=अमेरिकन नेशनल स्टैंडर्ड प्रोग्रामिंग लैंग्वेज PL/I|year=1976}}</ref> 1990 में, हैनसन ने स्पष्ट किया कि सी में स्पष्ट क्षेत्र जिसे वह निर्विवाद रुप से कहने के लिए आवश्यक है, को भी तेजी से ज्ञात ढेर आवंटन तंत्र से बेहतर प्रति बाइट के लिए समय प्रदर्शन प्राप्त कर सकता है।<ref name="hanson" />कुछ शुरुआती सी-आधारित सॉफ़्टवेयर परियोजनाओं को डिज़ाइन करने में स्पष्ट क्षेत्र महत्वपूर्ण थे, जिनमें अपाचे एचटीटीपी सर्वर सम्मिलित है, जो उन्हें पूल कहता है, और पोस्टग्रेएसक्यूएल डेटाबेस प्रबंधन प्रणाली, जो उन्हें स्मृति संदर्भ कहते हैं।<ref>
</ref> 1976 में, पीएल/आई मानक में क्षेत्र डेटा प्रकार सम्मिलित था।<ref>{{cite book|last=American National Standards Institute, inc.|title=अमेरिकन नेशनल स्टैंडर्ड प्रोग्रामिंग लैंग्वेज PL/I|year=1976}}</ref> 1990 में, हैनसन ने स्पष्ट किया कि सी में स्पष्ट क्षेत्र जिसे वह निर्विवाद रुप से कहने के लिए आवश्यक है, को भी तेजी से ज्ञात ढेर आवंटन तंत्र से बेहतर प्रति बाइट के लिए समय प्रदर्शन प्राप्त कर सकता है।<ref name="hanson" />कुछ प्रारम्भिक सी-आधारित सॉफ़्टवेयर परियोजनाओं को डिज़ाइन करने में स्पष्ट क्षेत्र महत्वपूर्ण थे, जिनमें अपाचे एचटीटीपी सर्वर सम्मिलित है, जो उन्हें पूल कहता है, और पोस्टग्रेएसक्यूएल डेटाबेस प्रबंधन प्रणाली, जो उन्हें स्मृति संदर्भ कहते हैं।<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 37: Line 34:
सन 1988 में शोधकर्ताओं ने जांच शुरू की कि किस प्रकार सुरक्षित स्मृति आवंटन के लिए क्षेत्रों का प्रयोग क्षेत्र निष्कर्ष की अवधारणा को आरंभ किया जाए, जहां क्षेत्रों की रचना और विस्थापपना, साथ ही विशिष्ट क्षेत्रों में व्यक्तिगत स्थिर नियतन अभिव्यक्ति के नियतन को संकलन समय पर कंपाइलर द्वारा जोड़ा गया है.संकलक इस तरह से यह कर सकता है ताकि यह झटकों वाले पॉइंट्स और लीक की गारंटी न दे।
सन 1988 में शोधकर्ताओं ने जांच शुरू की कि किस प्रकार सुरक्षित स्मृति आवंटन के लिए क्षेत्रों का प्रयोग क्षेत्र निष्कर्ष की अवधारणा को आरंभ किया जाए, जहां क्षेत्रों की रचना और विस्थापपना, साथ ही विशिष्ट क्षेत्रों में व्यक्तिगत स्थिर नियतन अभिव्यक्ति के नियतन को संकलन समय पर कंपाइलर द्वारा जोड़ा गया है.संकलक इस तरह से यह कर सकता है ताकि यह झटकों वाले पॉइंट्स और लीक की गारंटी न दे।


रग्गिएरी और मुर्तघ के शुरुआती काम में,<ref>
रग्गिएरी और मुर्तघ के प्रारम्भिक काम में,<ref>
{{cite conference |url=http://portal.acm.org/citation.cfm?id=73585 |title=Lifetime analysis of dynamically allocated objects |last1=Ruggieri |first1=Cristina |last2=Murtagh |first2=Thomas P. |year=1988 |book-title=POPL '88: Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages |publisher=ACM |accessdate=22 February 2010 |location=New York, NY, USA |doi = 10.1145/73560.73585}}
{{cite conference |url=http://portal.acm.org/citation.cfm?id=73585 |title=Lifetime analysis of dynamically allocated objects |last1=Ruggieri |first1=Cristina |last2=Murtagh |first2=Thomas P. |year=1988 |book-title=POPL '88: Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages |publisher=ACM |accessdate=22 February 2010 |location=New York, NY, USA |doi = 10.1145/73560.73585}}
</ref> प्रत्येक समारोह की शुरुआत में एक क्षेत्र बनाया जाता है और अंत में हटा दिया जाता है। इसके बाद वे प्रत्येक स्थैतिक आवंटन अभिव्यक्ति के लिए जीवनकाल निर्धारित करने के लिए [[डेटा प्रवाह विश्लेषण]] का उपयोग करते हैं, और इसे सबसे कम उम्र के क्षेत्र में असाइन करते हैं जिसमें इसका पूरा जीवनकाल होता है।
</ref> प्रत्येक समारोह के प्रारम्भ में एक क्षेत्र बनाया जाता है और अंत में हटा दिया जाता है। इसके बाद वे प्रत्येक स्थैतिक आवंटन अभिव्यक्ति के लिए जीवनकाल निर्धारित करने के लिए [[डेटा प्रवाह विश्लेषण]] का उपयोग करते हैं, और इसे सबसे कम उम्र के क्षेत्र में असाइन करते हैं जिसमें इसका पूरा जीवनकाल होता है।


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


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


इस वाक्यात्मक संरचना के कारण, क्षेत्र नेस्टेड हैं, जिसका अर्थ है कि यदि r<sub>2</sub> आर के बाद बनाया गया है<sub>1</sub>, इसे r से पहले भी आवंटित किया जाना चाहिए<sub>1</sub>; परिणाम क्षेत्रों का ढेर है। इसके अलावा, क्षेत्रों को उसी कार्य में हटा दिया जाना चाहिए जिसमें वे बनाए गए हैं। ऐकेन एट अल द्वारा इन प्रतिबंधों में ढील दी गई थी।<ref>
इस वाक्यात्मक संरचना के कारण, क्षेत्र नेस्टेड हैं, जिसका अर्थ है कि यदि r<sub>2</sub> आर के बाद बनाया गया है<sub>1</sub>, इसे r से पहले भी आवंटित किया जाना चाहिए<sub>1</sub>; परिणाम क्षेत्रों का ढेर है। इसके अलावा, क्षेत्रों को उसी कार्य में हटा दिया जाना चाहिए जिसमें वे बनाए गए हैं। ऐकेन एट अल द्वारा इन प्रतिबंधों में ढील दी गई थी।<ref>
Line 116: Line 113:
{{cite conference |title=Immix: a mark-region garbage collector with space efficiency, fast collection, and mutator performance |last1=Blackburn |first1=Stephen M. |author-link1=Stephen M. Blackburn |last2=McKinley |first2=Kathryn S. |author-link2=Kathryn McKinley |year=2008 |publisher=ACM |location=New York, NY, USA |book-title=PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation |pages=22&ndash;32 |isbn=978-1-59593-860-2 |doi=10.1145/1375581.1375586 |url=http://dl.acm.org/citation.cfm?doid=1375581.1375586 |accessdate=15 April 2014}}
{{cite conference |title=Immix: a mark-region garbage collector with space efficiency, fast collection, and mutator performance |last1=Blackburn |first1=Stephen M. |author-link1=Stephen M. Blackburn |last2=McKinley |first2=Kathryn S. |author-link2=Kathryn McKinley |year=2008 |publisher=ACM |location=New York, NY, USA |book-title=PLDI '08: Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation |pages=22&ndash;32 |isbn=978-1-59593-860-2 |doi=10.1145/1375581.1375586 |url=http://dl.acm.org/citation.cfm?doid=1375581.1375586 |accessdate=15 April 2014}}
</ref>
</ref>
==इस पेज में लापता आंतरिक लिंक की सूची==
*ढेर आवंटन
*अपाचे एचटीटीपी सर्वर
*स्मृति सुरक्षा
*उच्च-क्रम समारोह
*बहुरूपता टाइप करें
*अनुमान टाइप करें
*क्षेत्र प्रकार
*लैम्ब्डा कैलकुलस
*मध्यवर्ती प्रतिनिधित्व
*संदर्भ गिनती
*कचरा संग्रह का पता लगाना
== संदर्भ ==
== संदर्भ ==
{{reflist|30em}}
{{reflist|30em}}


{{Memory management navbox}}
[[Category:All Wikipedia articles written in American English]]
[[Category:All articles with dead external links]]
[[Category:Articles with dead external links from April 2018]]
[[Category:Articles with dead external links from February 2020]]
[[Category:Articles with invalid date parameter in template]]
[[Category:Articles with permanently dead external links]]
[[Category:Articles with short description]]
[[Category:CS1]]
[[Category:CS1 français-language sources (fr)]]
[[Category:CS1 maint]]
[[Category:CS1 Ελληνικά-language sources (el)]]
[[Category:Citation Style 1 templates|W]]
[[Category:Collapse templates]]
[[Category:Created On 15/12/2022]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite web]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates used by AutoWikiBrowser|Cite web]]
[[Category:Templates using TemplateData]]
[[Category:Use American English from February 2019]]
[[Category:Wikipedia fully protected templates|Cite web]]
[[Category:Wikipedia metatemplates]]
[[Category:स्मृति प्रबंधन]]
[[Category:स्मृति प्रबंधन]]
[[Category: Machine Translated Page]]
[[Category:Created On 15/12/2022]]

Latest revision as of 12:57, 13 September 2023

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

उदाहरण

एक सरल उदाहरण के रूप में, नीचे दिए गए सी (प्रोग्रामिंग भाषा) कोड के बारे में विचार करें जो एक लिंक किए गए सूची की डेटा संरचना को आवंटित करता है और उसके बाद फिर एक डीलॉकेट करता है Region *r = createRegion();

ListNode *head = NULL;
for (int i = 1; i <= 1000; i++) {
 ListNode* newNode = allocateFromRegion(r, sizeof(ListNode));
 newNode->next = head;
 head = newNode;
}
// ...
// (use list here)
// ...
destroyRegion(r);

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

कार्यान्वयन

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

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

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

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

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

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

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

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

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

इस वाक्यात्मक संरचना के कारण, क्षेत्र नेस्टेड हैं, जिसका अर्थ है कि यदि 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]

संदर्भ

  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.