إدارة الذاكرة القائمة على المناطق
في علوم الحاسوب ، تُعدّ إدارة الذاكرة القائمة على المناطق نوعًا من إدارة الذاكرة ، حيث يُخصّص كل كائن مُخصّص لمنطقة معينة . والمنطقة، التي تُسمى أيضًا قسمًا أو مجموعة فرعية أو نطاقًا أو ساحة أو سياق ذاكرة ، هي مجموعة من الكائنات المُخصّصة التي يُمكن إعادة تخصيصها أو إلغاء تخصيصها بكفاءة دفعة واحدة. غالبًا ما تُسمى مُخصّصات الذاكرة التي تستخدم إدارة قائمة على المناطق بمُخصّصات المناطق ، وعندما تعمل عن طريق "تحديث" مؤشر واحد فقط، تُسمى مُخصّصات التحديث .
على غرار تخصيص الذاكرة في المكدس ، تُسهّل المناطق تخصيص الذاكرة وتحريرها بتكلفة منخفضة؛ لكنها أكثر مرونة، إذ تسمح للكائنات بالبقاء لفترة أطول من إطار المكدس الذي خُصصت فيه. في التطبيقات النموذجية، تُخصص جميع الكائنات في منطقة ما ضمن نطاق متصل واحد من عناوين الذاكرة، على غرار كيفية تخصيص إطارات المكدس عادةً.
في نظام التشغيل OS/360 والإصدارات اللاحقة ، يُطبَّق هذا المفهوم على مستويين؛ حيث تُنفَّذ كل مهمة ضمن قسم أو منطقة متجاورة [ أ ] . [ ب ] وتُحدِّد طلبات تخصيص التخزين مجموعة فرعية، ويمكن للتطبيق تحرير مجموعة فرعية كاملة. ويتم تخصيص مساحة التخزين للمجموعة الفرعية من المنطقة أو القسم على شكل كتل من مضاعفات 2 كيلوبايت [ ج ] أو 4 كيلوبايت [ د ]، وهي عادةً غير متجاورة.
مثال
كمثال بسيط، ضع في اعتبارك كود C++ التالي ، الذي ينفذ ساحة وقت ترجمة بسيطة ، ونوع بيانات بسيط يتكون من سلسلة وقيمة عددية صحيحة.
استيراد std ؛باستخدام std :: bad_alloc ؛ باستخدام std :: constructible_from ؛ باستخدام std :: span ؛ باستخدام std :: string ؛ باستخدام std :: unique_ptr ؛class Arena { private : unique_ptr < byte [] > storage ; size_t capacity ; size_t offset ;constexpr void * allocateBytes ( size_t size , size_t alignment ) { void * ptr = storage . get () + offset ; size_t space = capacity - offset ; size_t alignedOffset = capacity - space ; if ( alignedOffset + size > capacity ) { throw bad_alloc ( "فشل تخصيص البايتات!" ); } offset = alignedOffset + size ; return ptr ; } public : constexpr explicit Arena ( size_t capacity ) : storage { std :: make_unique < byte [] > ( capacity )}, capacity { capacity }, offset { 0 } {}constexpr ~ Arena () = default ; constexpr Arena ( Arena && ) noexcept = default ; constexpr Arena & operator = ( Arena && ) noexcept = default ;constexpr Arena ( const Arena & ) = delete ( "تم تعطيل إنشاء النسخ لـ Arena" ); constexpr Arena & operator = ( const Arena & ) = delete ( "تم تعطيل إسناد النسخ لـ Arena" );template < typename T , typename ... Args > requires constructible_from < T , Args ... > constexpr T * allocate ( Args && ... args ) { void * mem = allocateBytes ( sizeof ( T ), alignof ( T )); return std :: construct_at ( static_cast < T *> ( mem ), std :: forward < Args > ( args )...); }constexpr void reset () noexcept { offset = 0 ; }constexpr span < byte > remaining () const noexcept { return { storage . get () + offset , capacity - offset }; } };struct Node { string name ; int value ; };int main () { Arena arena ( 4096 ); Node * a = arena . allocate < Node > ( "Alpha" , 1 ); Node * b = arena . allocate < Node > ( "Beta" , 2 );std :: println ( "a = ({}, {})" , a- > name , a- > value ); std :: println ( "b = ({}, {})" , b- > name , b- > value ) ; arena.reset ( ); }تطبيق
تُعدّ المناطق الصريحة البسيطة سهلة التنفيذ؛ ويستند الوصف التالي إلى عمل هانسون. [ 1 ] تُنفَّذ كل منطقة كقائمة مرتبطة من كتل كبيرة من الذاكرة؛ يجب أن تكون كل كتلة كبيرة بما يكفي لتلبية العديد من عمليات التخصيص. تحتفظ الكتلة الحالية بمؤشر إلى الموضع الحر التالي فيها، وإذا امتلأت الكتلة، تُخصَّص كتلة جديدة وتُضاف إلى القائمة. عند تحرير المنطقة، يُعاد تعيين مؤشر الموضع الحر التالي إلى بداية الكتلة الأولى، ويمكن إعادة استخدام قائمة الكتل للمنطقة المُخصَّصة التالية. بدلاً من ذلك، عند تحرير منطقة، يمكن إلحاق قائمة كتلها بقائمة عامة للكتل الحرة، والتي يمكن للمناطق الأخرى تخصيص كتل جديدة منها لاحقًا. في كلتا الحالتين من هذا المخطط البسيط، لا يمكن تحرير كائنات فردية داخل المناطق.
التكلفة الإجمالية لكل بايت مُخصّص في هذه الآلية منخفضة للغاية؛ إذ تقتصر معظم عمليات التخصيص على مقارنة وتحديث مؤشر الموضع الحر التالي. أما تحرير منطقة من الذاكرة فهو عملية تستغرق وقتًا ثابتًا، ونادرًا ما تُنفّذ. وعلى عكس أنظمة جمع البيانات المهملة التقليدية ، لا حاجة لتصنيف البيانات حسب نوعها.
التاريخ والمفاهيم
يُعدّ المفهوم الأساسي للمناطق قديمًا جدًا، إذ ظهر لأول مرة عام 1967 في حزمة التخزين الحر AED لدوجلاس تي. روس، حيث قُسّمت الذاكرة إلى تسلسل هرمي من المناطق؛ لكل منطقة مُخصِّص خاص بها، ويمكن تحرير منطقة بأكملها دفعة واحدة، مما يجعل المناطق قابلة للاستخدام كمناطق. [ 2 ] في عام 1976، تضمن معيار PL/I نوع بيانات AREA. [ 3 ] في عام 1990، أثبت هانسون أن المناطق الصريحة في لغة C (التي أطلق عليها اسم "الساحات" ) يمكن أن تحقق أداءً زمنيًا لكل بايت مُخصَّص يفوق حتى أسرع آلية معروفة لتخصيص الذاكرة في الكومة. [ 1 ] لعبت المناطق الصريحة دورًا أساسيًا في تصميم بعض مشاريع البرمجيات المبكرة القائمة على لغة C، بما في ذلك خادم Apache HTTP ، الذي يُطلق عليها اسم "المجمعات"، ونظام إدارة قواعد البيانات PostgreSQL ، الذي يُطلق عليها اسم "سياقات الذاكرة". [ 4 ] ومثل تخصيص الذاكرة التقليدي في الكومة، لا توفر هذه المخططات أمانًا للذاكرة . من الممكن للمبرمج الوصول إلى منطقة بعد إلغاء تخصيصها من خلال مؤشر معلق ، أو أن ينسى إلغاء تخصيص منطقة، مما يتسبب في تسرب الذاكرة .
استنتاج المنطقة
في عام ١٩٨٨، بدأ الباحثون بدراسة كيفية استخدام المناطق لتخصيص الذاكرة بشكل آمن، وذلك من خلال تقديم مفهوم استنتاج المناطق ، حيث يقوم المترجم بإدراج إنشاء المناطق وإلغاء تخصيصها، بالإضافة إلى تعيين تعبيرات التخصيص الثابتة الفردية لمناطق محددة، أثناء عملية الترجمة. ويستطيع المترجم القيام بذلك بطريقة تضمن عدم حدوث مؤشرات معلقة أو تسريبات للذاكرة.
في دراسة مبكرة أجراها روجيري ومورتاغ، [ 5 ] يتم إنشاء منطقة في بداية كل دالة وإلغاء تخصيصها في نهايتها. ثم يستخدمون تحليل تدفق البيانات لتحديد عمر كل تعبير تخصيص ثابت، ويخصصونه لأحدث منطقة تحتوي على كامل عمره.
في عام 1994، عُمِّم هذا العمل في دراسة رائدة لتوفته وتالبين لدعم تعدد الأشكال النوعية والدوال ذات الرتبة العليا في لغة البرمجة الوظيفية Standard ML ، باستخدام خوارزمية مختلفة تعتمد على استنتاج النوع والمفاهيم النظرية لأنواع المناطق متعددة الأشكال وحساب المناطق . [ 6 ] [ 7 ] وقد أدخل عملهما امتدادًا لحساب لامدا يشمل المناطق، مضيفًا بنيتين:
- فياحسب نتيجة التعبيروقم بتخزينه في المنطقة؛
- letregionفيالنهاية: أنشئ منطقة واربطها بـ؛ يقيمثم قم بإلغاء تخصيص المنطقة.
بسبب هذا التركيب النحوي، تكون المناطق متداخلة ، مما يعني أنه إذايتم إنشاؤه بعديجب أيضًا إلغاء تخصيصها قبلوالنتيجة هي مجموعة من المناطق. علاوة على ذلك، يجب تحرير المناطق في نفس الدالة التي تم إنشاؤها فيها. وقد تم تخفيف هذه القيود بواسطة آيكن وآخرون [ 8 ] .
كان الهدف من حساب لامدا الموسع هذا أن يكون بمثابة تمثيل وسيط آمن للذاكرة بشكل مثبت لتجميع برامج Standard ML إلى لغة الآلة، ولكن بناء مترجم يُنتج نتائج جيدة على البرامج الكبيرة واجه عددًا من القيود العملية التي كان لا بد من حلها بتحليلات جديدة، بما في ذلك التعامل مع الاستدعاءات المتكررة، واستدعاءات الذيل ، وإزالة المناطق التي تحتوي على قيمة واحدة فقط. أُنجز هذا العمل في عام 1995 [ 9 ] ودُمج في ML Kit، وهو إصدار من ML يعتمد على تخصيص المناطق بدلاً من جمع البيانات المهملة. سمح هذا بإجراء مقارنة مباشرة بين الإصدارين على برامج اختبار متوسطة الحجم، مما أسفر عن نتائج متفاوتة على نطاق واسع ("أسرع بعشر مرات وأبطأ بأربع مرات") اعتمادًا على مدى "ملاءمة" البرنامج للمناطق؛ ومع ذلك، كانت أوقات التجميع في حدود الدقائق. [ 10 ] تم توسيع نطاق ML Kit في النهاية ليشمل التطبيقات الكبيرة بإضافتين: مخطط للتجميع المنفصل للوحدات، وتقنية هجينة تجمع بين استنتاج المناطق وتتبع جمع البيانات المهملة. [ 11 ] [ 12 ]
التعميم على بيئات لغوية جديدة
بعد تطوير مجموعة أدوات التعلم الآلي، بدأت المناطق في التعميم على بيئات لغوية أخرى:
- إضافات متنوعة للغة البرمجة C:
- تُضيف لهجة لغة C الآمنة Cyclone ، من بين العديد من الميزات الأخرى، دعمًا للمناطق الصريحة، وتقيّم تأثير ترحيل تطبيقات C الحالية لاستخدامها. [ 13 ] [ 14 ] [ 15 ]
- تم تطوير إضافة للغة C تُسمى RC [ 16 ] ، تستخدم مناطق مُدارة بشكل صريح، بالإضافة إلى عدّ المراجع لضمان سلامة الذاكرة من خلال التأكد من عدم تحرير أي منطقة قبل الأوان. [ 17 ] [ 18 ] تُقلل المناطق من عبء عدّ المراجع، حيث لا تتطلب المراجع الداخلية للمناطق تحديث عدّها عند تعديلها. تتضمن RC نظام أنواع ثابتًا صريحًا للمناطق، مما يسمح بإلغاء بعض تحديثات عدّ المراجع. [ 19 ]
- يُقيّد قيدٌ في لغة C يُسمى Control-C البرامجَ باستخدام مناطق (ومنطقة واحدة فقط في كل مرة)، وذلك كجزء من تصميمها لضمان سلامة الذاكرة بشكل ثابت. [ 20 ]
- تم تطبيق مفهوم المناطق في مجموعة فرعية من لغة جافا ، [ 21 ] وأصبحت عنصرًا أساسيًا في إدارة الذاكرة في جافا في الوقت الحقيقي ، حيث يتم دمجها مع أنواع الملكية لتوضيح تغليف الكائنات وإلغاء عمليات التحقق أثناء التشغيل من تحرير المناطق. [ 22 ] [ 23 ] [ 24 ] ومؤخرًا، تم اقتراح نظام شبه آلي لاستنتاج المناطق في تطبيقات جافا المضمنة في الوقت الحقيقي، يجمع بين التحليل الثابت في وقت الترجمة، وسياسة تخصيص المناطق أثناء التشغيل، وتلميحات للمبرمج. [ 25 ] [ 26 ] تُعد المناطق مناسبة تمامًا للحوسبة في الوقت الحقيقي لأن وقتها الإضافي قابل للتنبؤ به بشكل ثابت، دون تعقيد عملية جمع البيانات المهملة التدريجية.
- تم تطبيقها للغات البرمجة المنطقية Prolog [ 27 ] [ 28 ] و Mercury [ 29 ] [ 30 ] عن طريق توسيع نموذج استنتاج المنطقة الخاص بـ Tofte و Talpin لدعم التراجع والقطع.
- تُستخدم إدارة التخزين القائمة على المناطق في جميع أنحاء لغة البرمجة المتوازية ParaSail . ونظرًا لعدم وجود مؤشرات صريحة في ParaSail، [ 31 ] فلا حاجة إلى عدّ المراجع.
دعم المكتبة القياسي
- ميزات لغة C++
std::pmr::monotonic_buffer_resourceداخلstd::pmrالمكتبة (المحددة في ملف الرأس<memory_resource>). [ 32 ] - أضافت Java 21 واجهة برمجة تطبيقات Java لتخصيص وتحرير وحدات Arena. [ 33 ] والهدف المعلن من ذلك هو تحسين التكامل الآمن مع المكتبات الأصلية لمنع تسرب ذاكرة JVM وتقليل مخاطر تلف ذاكرة JVM بواسطة التعليمات البرمجية الأصلية. [ 34 ] تُعدّ وحدات Arena جزءًا من واجهة Java Foreign Function and Memory Interface (التي تم تقديمها في Java 22 وأصبحت مستقرة في Java 25)، وهي خليفة واجهة Java Native Interface (JNI)، وتتضمن فئات مثل
java.lang.foreign.Arena[ 35] و[ 36 ] و [java.lang.foreign.MemorySegment37] وغيرها. - تتضمن لغة Go
arenaمكتبة، معarena.Arena. [ 36 ] - يمتلك زيج
std.heap.ArenaAllocatorالبنية. [ 37 ]
العيوب
قد تواجه الأنظمة التي تستخدم المناطق مشكلاتٍ تتمثل في تضخم حجم هذه المناطق قبل تحريرها، واحتوائها على نسبة كبيرة من البيانات غير المستخدمة؛ وتُعرف هذه المشكلات عادةً باسم "التسريبات" (على الرغم من تحريرها في النهاية). قد يتطلب التخلص من هذه التسريبات إعادة هيكلة البرنامج، عادةً عن طريق إضافة مناطق جديدة ذات عمر أقصر. يُعدّ تصحيح هذا النوع من المشكلات صعبًا للغاية، خاصةً في الأنظمة التي تستخدم استنتاج المناطق، حيث يجب على المبرمج فهم خوارزمية الاستنتاج الأساسية، أو فحص التمثيل الوسيط المفصّل، لتشخيص المشكلة. تُعدّ مُجمّعات البيانات المهملة التتبعية أكثر فعالية في تحرير هذا النوع من البيانات في الوقت المناسب دون الحاجة إلى تغييرات في البرنامج؛ وكان هذا أحد مبررات أنظمة المناطق/مُجمّعات البيانات المهملة الهجينة. [ 11 ] من ناحية أخرى، قد تُظهر مُجمّعات البيانات المهملة التتبعية أيضًا تسريبات خفية، إذا تم الاحتفاظ بمراجع لبيانات لن تُستخدم مرة أخرى.
تُحقق إدارة الذاكرة القائمة على المناطق أفضل النتائج عندما يكون عدد المناطق صغيرًا نسبيًا وتحتوي كل منطقة على العديد من الكائنات؛ أما البرامج التي تحتوي على العديد من المناطق المتفرقة فستُظهر تجزئة داخلية ، مما يؤدي إلى هدر الذاكرة وزيادة وقت إدارة المناطق. ومع ذلك، في حال وجود استنتاج المناطق، قد يصعب تشخيص هذه المشكلة.
الأساليب الهجينة
كما ذُكر سابقًا، يستخدم RC مزيجًا من المناطق وعدّ المراجع ، مما يحدّ من عبء عدّ المراجع نظرًا لأن المراجع الداخلية للمناطق لا تتطلب تحديثًا للعدّ عند تعديلها. وبالمثل، تجمع بعض الطرق الهجينة التي تعتمد على وضع علامات على المناطق بين تتبع جمع البيانات المهملة والمناطق؛ وتعمل هذه الطرق بتقسيم الذاكرة الرئيسية إلى مناطق، وإجراء عملية مسح ووضع علامات حيث يتم وضع علامة على أي مناطق تحتوي على كائنات نشطة، ثم تحرير أي مناطق غير مُعلّمة. وتتطلب هذه الطرق إلغاء تجزئة مستمر للحفاظ على فعاليتها. [ 38 ]
ملحوظات
مراجع
- 1 2 هانسون، ديفيد ر. (1989). "التخصيص السريع وإلغاء تخصيص الذاكرة بناءً على دورة حياة الكائنات" . البرمجيات: الممارسة والخبرة . 20 (1): 5-12 . doi : 10.1002/spe.4380200104 . S2CID 8960945 .
{{cite journal}}: CS1 maint: deprecated archiveal service ( link ) - ↑ روس، دوغلاس (1967). "حزمة التخزين المجانية لجهاز تنظيم ضربات القلب الخارجي الآلي" . اتصالات رابطة آلات الحوسبة . 10 (8): 481-492 . doi : 10.1145/363534.363546 . S2CID 6572689 .
- ↑ المعهد الوطني الأمريكي للمعايير (1976). لغة البرمجة المعيارية الوطنية الأمريكية PL/I .
- ↑ مجموعة تطوير PostgreSQL العالمية (1996). "القسم 41.3: إدارة الذاكرة" . وثائق PostgreSQL 8.2.15 . تاريخ الاطلاع: 22 فبراير 2010 .
{{cite web}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ روجيري، كريستينا؛ مورتاغ، توماس ب. (1988). "تحليل دورة حياة الكائنات المُخصصة ديناميكيًا" . POPL '88: وقائع الندوة الخامسة عشرة لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. doi : 10.1145/73560.73585 . تاريخ الاسترجاع: 22 فبراير 2010 .
- ↑ توفت، مادز؛ جان بيير تالبين (1993). نظرية تخصيص الذاكرة في المكدس في اللغات متعددة الأشكال (تقرير فني). قسم علوم الحاسوب، جامعة كوبنهاغن. 93/15.على موقع Citeseer
- ↑ توفت، مادز ؛ تالبين، جان بيير (1994). "تنفيذ حساب لامدا المكتوب بالقيمة باستخدام مكدس من المناطق" . POPL '94: وقائع الندوة الحادية والعشرين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 188-201 . doi : 10.1145/174675.177855 . ISBN 0-89791-636-0تم الاطلاع عليه بتاريخ 15 أبريل 2014 .
- ↑ أيكن، أليكس؛ مانويل فاندريش، راف ليفين (1995). إدارة أفضل للذاكرة الثابتة: تحسين التحليل القائم على المناطق للغات ذات الرتبة العليا (تقرير فني). قسم الهندسة الكهربائية وعلوم الحاسوب، جامعة كاليفورنيا، بيركلي. UCB/CSD-95-866.على موقع Citeseer
- ↑ بيركيدال، لارس ؛ توفت، مادز ؛ فيلستروب، ماغنوس (1996). "من استدلال المنطقة إلى آلات فون نيومان عبر استدلال تمثيل المنطقة" . POPL '96: وقائع الندوة الثالثة والعشرين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 171-183 . doi : 10.1145/237721.237771 . ISBN 0-89791-769-3تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ توفت، مادز؛ بيركيدال، لارس؛ إلسمان، مارتن؛ هالنبرغ، نيلز (2004). "نظرة استرجاعية على إدارة الذاكرة القائمة على المناطق" . الحوسبة الرمزية من الرتبة العليا . 17 (3): 245-265 . doi : 10.1023/B:LISP.0000029446.78563.a4 . ISSN 1388-3690 .
- 1 2 هالنبرغ، نيلز؛ إلزمان، مارتن؛ توفت ، مادس (2003). “الجمع بين استنتاج المنطقة وجمع البيانات المهملة”. إشعارات سيغبلان . 37 (5): 141-152 . دوى : 10.1145 / 543552.512547 . ISSN 0362-1340 .
- ↑ إلسمان، مارتن (2003). "أمان جمع البيانات المهملة لإدارة الذاكرة القائمة على المناطق". إشعارات SIGPLAN . 38 (3): 123-134 . CiteSeerX 10.1.1.57.8914 . doi : 10.1145/640136.604190 . ISSN 0362-1340 .
- ↑ "سايكلون: مقدمة إلى المناطق" . دليل مستخدم سايكلون . تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ غروسمان، دان؛ موريسيت، غريغ؛ جيم، تريفور؛ هيكس، مايكل؛ وانغ، يانلينغ (2002). "إدارة الذاكرة القائمة على المناطق في سايكلون". إشعارات SIGPLAN . 37 (5): 282-293 . doi : 10.1145/543552.512563 .
- ↑ هيكس، مايكل؛ موريسيت، جريج ؛ جروسمان، دان (2004). "تجربة إدارة الذاكرة اليدوية الآمنة في برنامج سايكلون" . ISMM '04: وقائع الندوة الدولية الرابعة حول إدارة الذاكرة . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 73-84 . doi : 10.1145/1029873.1029883 . ISBN 1-58113-945-4تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ جاي، ديفيد (1999). "RC - إدارة ذاكرة آمنة قائمة على المناطق للغة C" . الصفحة الرئيسية لديفيد جاي . مختبرات إنتل بيركلي. مؤرشف من الأصل في 26 فبراير 2009. تم الاطلاع عليه في 22 فبراير 2010 .
- ↑ جاي، ديفيد ؛ أيكن، أليكس (1998). "إدارة الذاكرة باستخدام مناطق صريحة" . PLDI '98: وقائع مؤتمر ACM SIGPLAN 1998 حول تصميم لغات البرمجة وتنفيذها . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 313-323 . doi : 10.1145/277650.277748 . ISBN 0-89791-987-4تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ جاي، ديفيد إدوارد (2001). إدارة الذاكرة باستخدام مناطق صريحة (ملف PDF) (أطروحة دكتوراه في علوم الحاسوب). جامعة كاليفورنيا في بيركلي . تم الاطلاع عليه بتاريخ 20 فبراير 2010 .
- ↑ جاي، ديفيد ؛ أيكن، أليكس (2001). "دعم اللغة للمناطق". إشعارات SIGPLAN . 36 (5): 70-80 . CiteSeerX 10.1.1.650.721 . doi : 10.1145/381694.378815 . ISSN 0362-1340 .
- ↑ كوشيك، سومانت؛ دهورجاتي، ديناكار؛ أدفي، فيكرام (2002). "ضمان سلامة الكود دون فحوصات وقت التشغيل لأنظمة التحكم في الوقت الحقيقي" . CASES '02: وقائع المؤتمر الدولي لعام 2002 حول المترجمات، والهندسة المعمارية، والتوليف للأنظمة المدمجة . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 288-297 . doi : 10.1145/581630.581678 . ISBN 1-58113-575-0تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ كريستيانسن، مورتن ف. (1998). "إدارة الذاكرة القائمة على المناطق في جافا" . قسم علوم الحاسوب (DIKU)، جامعة كوبنهاغن ( FTP ) . تم الاطلاع عليه بتاريخ 20 فبراير 2010 .(للاطلاع على المستندات، انظر صفحة المساعدة: FTP )
- ↑ بيبي، ويليام س.؛ رينارد، مارتن س. (2001). "تطبيق للذاكرة ذات النطاق المحدد لجافا في الوقت الحقيقي" . EMSOFT '01: وقائع ورشة العمل الدولية الأولى حول البرمجيات المدمجة . لندن، المملكة المتحدة: سبرينغر-فيرلاغ. ص 289-305 . ISBN 3-540-42673-6تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ سالشيانو، ألكساندرو؛ تشاندراسيكار بوياباتي، ويليام بيبي الابن، مارتن رينارد (2003). نظام أنواع لإدارة الذاكرة الآمنة القائمة على المناطق في جافا في الوقت الحقيقي (ملف PDF) (تقرير فني). مختبر علوم الحاسوب في معهد ماساتشوستس للتكنولوجيا. MIT-LCS-TR-869.
{{cite tech report}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط ) - ↑ بوياباتي، تشاندراسيكار ؛ سالسيانو، ألكساندرو ؛ بيبي، ويليام الابن (2003). "أنواع الملكية لإدارة الذاكرة الآمنة القائمة على المناطق في جافا في الوقت الحقيقي" . PLDI '03: وقائع مؤتمر ACM SIGPLAN 2003 حول تصميم لغات البرمجة وتنفيذها . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 324-337 . doi : 10.1145/781131.781168 . ISBN 1-58113-662-5تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ ناخلي، شاكر ؛ ريبير، كريستوف ؛ سالانياك، غيوم ؛ يوفين، سيرجيو (2007). "إدارة فعّالة للذاكرة القائمة على المناطق لأنظمة الوقت الحقيقي المدمجة ذات الموارد المحدودة" (ملف PDF) . وقائع "ورشة عمل حول تنفيذ وتجميع وتحسين لغات البرمجة الكائنية والبرامج والأنظمة (ICOOOLPS'2006)" . تاريخ الاطلاع: 22 فبراير 2010 .
- ↑ سالانياك، غيوم ؛ ريبير، كريستوف (2007). "إدارة الذاكرة شبه الآلية القائمة على المناطق لأنظمة جافا المدمجة في الوقت الحقيقي". RTCSA '07: وقائع المؤتمر الدولي الثالث عشر لمعهد مهندسي الكهرباء والإلكترونيات حول أنظمة وتطبيقات الحوسبة المدمجة والوقت الحقيقي . واشنطن العاصمة، الولايات المتحدة الأمريكية: جمعية الحاسبات التابعة لمعهد مهندسي الكهرباء والإلكترونيات. الصفحات 73-80 . doi : 10.1109/RTCSA.2007.67 . ISBN 978-0-7695-2975-2.
- ↑ ماكهولم، هينينغ (2000). إدارة الذاكرة القائمة على المناطق في لغة برولوج (ملف PDF) (رسالة ماجستير في علوم الحاسوب). جامعة كوبنهاغن، الدنمارك. مؤرشف من الأصل (ملف PDF) في 5 يونيو 2011. تم الاطلاع عليه في 20 فبراير 2010 .
- ↑ ماكهولم، هينينغ (2000). "مدير ذاكرة قائم على المناطق للغة برولوج" . ISMM '00: وقائع الندوة الدولية الثانية حول إدارة الذاكرة . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 25-34 . doi : 10.1145/362422.362434 . ISBN 1-58113-263-8تم الاطلاع عليه بتاريخ 22 فبراير 2010 .
- ↑ فان، كوان ؛ جانسينز، جيردا (2007). البرمجة المنطقية . سلسلة محاضرات في علوم الحاسوب. المجلد 4670/2007. سبرينغر برلين/هايدلبرغ. الصفحات 317-332 . doi : 10.1007/978-3-540-74610-2 . ISBN 978-3-540-74608-9ISSN 1611-3349
- ↑ فان، كوان ؛ سوموجي، زولتان (2008). "دعم وقت التشغيل لإدارة الذاكرة القائمة على المناطق في ميركوري" . ISMM '08: وقائع الندوة الدولية السابعة حول إدارة الذاكرة . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 61-70 . doi : 10.1145/1375634.1375644 . ISBN 978-1-60558-134-7تم الاطلاع عليه بتاريخ 15 أبريل 2014 .
- ↑ تافت، تاكر (2012). "مسار خالٍ من المؤشرات إلى البرمجة المتوازية الموجهة للكائنات" . مدونة ParaSail . تم الاطلاع عليه بتاريخ 14 سبتمبر 2012 .
- ↑ cppreference.com (7 مارس 2026). "std::pmr::monotonic_buffer_resource" . cppreference.com . cppreference.com.
- ↑ "قطاعات الذاكرة والساحات" . أوراكل.
- ↑ سيماداموري، ماوريتسيو. "JEP 454: واجهة برمجة تطبيقات الوظائف الخارجية والذاكرة" . OpenJDK.
- ↑ "حزمة java.lang.foreign" . شركة أوراكل.
- ↑ لغة برمجة Go. "ساحة الأوامر" . go.dev . لغة برمجة Go . تم الاطلاع عليه بتاريخ 8 مارس 2026 .
- ↑ لغة برمجة Zig. "std.heap.ArenaAllocator" . ziglang.org . لغة برمجة Zig . تم الاطلاع عليه بتاريخ 8 مارس 2026 .
- ↑ بلاكبيرن، ستيفن م .؛ ماكينلي، كاثرين س. (2008). "Immix: جامع قمامة بتقنية تحديد المناطق يتميز بكفاءة استخدام المساحة، وسرعة التجميع، وأداء التعديل" . PLDI '08: وقائع مؤتمر ACM SIGPLAN لعام 2008 حول تصميم لغات البرمجة وتنفيذها . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 22-32 . doi : 10.1145/1375581.1375586 . ISBN 978-1-59593-860-2تم الاطلاع عليه بتاريخ 15 أبريل 2014 .
- إدارة الذاكرة
