क्षेत्र-आधारित स्मृति प्रबंधन

From alpha
Revision as of 11:14, 12 April 2024 by Indicwiki (talk | contribs) (Created page with "{{Short description|Memory allocation scheme}} {{Use American English|date = February 2019}} कंप्यूटर विज्ञान में, क्षेत्...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Jump to navigation Jump to search

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

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

उदाहरण

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

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

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

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

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

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

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

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


नए भाषा परिवेश का सामान्यीकरण

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

  • चक्रवात (प्रोग्रामिंग भाषा) के विभिन्न एक्सटेंशन:
    • सुरक्षित सी बोली साइक्लोन (प्रोग्रामिंग भाषा), जो कई अन्य सुविधाओं के बीच स्पष्ट क्षेत्रों के लिए समर्थन जोड़ती है, और उनका उपयोग करने के लिए मौजूदा सी अनुप्रयोगों को माइग्रेट करने के प्रभाव का मूल्यांकन करती है।[13][14][15]
    • C का एक एक्सटेंशन जिसे RC कहा जाता है[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). American National Standard Programming Language 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 techreport}}: CS1 maint: multiple names: authors list (link)
  24. Boyapati, Chandrasekhar; Salcianu, Alexandru; Beebee, William Jr. (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). Logic Programming. Lecture Notes in Computer Science. Vol. 4670/2007. Springer Berlin / Heidelberg. pp. 317–332. doi:10.1007/978-3-540-74610-2. ISBN 978-3-540-74608-9. ISSN 1611-3349.
  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.