تخصيص الذاكرة الثابت والديناميكي Memory Allocation

اقرأ في هذا المقال


تخصيص الذاكرة (Memory allocation)، هو إجراء لتخصيص مساحة عنوان الذاكرة الفعلي (physical) أو الظاهري (virtual) لعملية ما “تعليماتها وبياناتها”، الطريقتان الأساسيتان لتخصيص الذاكرة هما تخصيص الذاكرة الثابت (static) وتخصيص الذاكرة الديناميكي (dynamic)، تقوم طريقة تخصيص الذاكرة الثابت بتعيين الذاكرة لعملية ما قبل تنفيذها، من ناحية أخرى، تقوم طريقة تخصيص الذاكرة الديناميكي بتعيين الذاكرة لعملية ما أثناء تنفيذها، في هذا المقال، سنناقش ما هو تخصيص الذاكرة، وأنواع تخصيص الذاكرة “الثابت والديناميكي” إلى جانب مزاياها وعيوبها.

ما المقصود بتخصيص الذاكرة Memory Allocation

لتنفيذ العملية، يجب وضعها أولاً في الذاكرة، يسمّى تخصيص مساحة لعملية ما في الذاكرة “تخصيص الذاكرة” (memory allocation)، يعد تخصيص الذاكرة جانبًا عامًا لمصطلح “الربط أو الارتباط” (binding)، دعونا نفهم الارتباط بمساعدة المثال التالي: لنفترض أنّ هناك كيانًا “محتوى” في أحد البرامج، مع مجموعة سمات، الآن، سيكون لمتغير هذا الكيان قيم لهذه المجموعة من السمات، لتخزين هذه القيم، يجب أن تكون لدينا ذاكرة مخصصة لهذه السمات.

لذلك، فإنّ عملية تخصيص عنوان الذاكرة لسمة المتغير تسمّى “تخصيص الذاكرة”، وعمل تحديد / ربط القيم بسمات المتغير يسمّى “الربط”، يجب تنفيذ إجراء الربط هذا قبل استخدام المتغير أثناء تنفيذ البرنامج، لدينا نوعان من تخصيص الذاكرة أو يمكننا أن نقول طريقتين للربط، الربط الثابت والديناميكي (static and dynamic binding).

أنواع تخصيص الذاكرة Types of Memory Allocation

تخصيص الذاكرة الثابت Static Memory Allocation

يتم تنفيذ تخصيص الذاكرة الثابت عندما يقوم المترجم بتجميع البرنامج وإنشاء ملفات العناصر، ويقوم الرابط بدمج جميع ملفات العناصر هذه وإنشاء ملف واحد قابل للتنفيذ، ويقوم المُحمل (loader) بتحميل هذا الملف القابل للتنفيذ الفردي في الذاكرة الرئيسية، للتنفيذ، في تخصيص الذاكرة الثابت، يجب معرفة حجم البيانات التي تتطلبها العملية قبل بدء تنفيذ العملية.

إذا لم تكن أحجام البيانات معروفة قبل تنفيذ العملية، فيجب تخمينها، إذا كان حجم البيانات التي تمّ تخمينها أكبر من المطلوب، فهذا يؤدي إلى إهدار الذاكرة، إذا كان الحجم الذي تمّ تخمينه أصغر، فإنّه يؤدي إلى تنفيذ غير مناسب للعملية، لا تحتاج طريقة تخصيص الذاكرة الثابت إلى أي عملية تخصيص للذاكرة أثناء تنفيذ العملية، نظرًا لأنّ جميع عمليات تخصيص الذاكرة المطلوبة للعملية تتم قبل بدء تنفيذ العملية، لذلك، فإنّه يؤدي إلى تنفيذ أسرع للعملية، يوفر تخصيص الذاكرة الثابت مزيدًا من الكفاءة عند مقارنتها بالتخصيص الديناميكي للذاكرة.

تخصيص الذاكرة الديناميكي Dynamic Memory Allocation

يتم تنفيذ تخصيص الذاكرة الديناميكي أثناء تنفيذ البرنامج، هنا، يتم تخصيص الذاكرة لعناصر البرنامج عندما يتم استخدامها لأول مرة أثناء تشغيل البرنامج، يُعرف الحجم الفعلي للبيانات المطلوبة في وقت التشغيل، لذا فهو يخصص مساحة الذاكرة الدقيقة للبرنامج وبالتالي يقلل من إهدار الذاكرة.

يوفر تخصيص الذاكرة الديناميكي المرونة في تنفيذ البرنامج، لأنّه يمكن أن يقرر مقدار مساحة الذاكرة التي سيحتاجها البرنامج، إذا كان البرنامج كبيرًا بما يكفي، فسيتم تنفيذ تخصيص ذاكرة ديناميكي على أجزاء مختلفة من البرنامج، والذي سيتم استخدامه حاليًا هذا يقلل من إهدار الذاكرة ويحسن أداء النظام، يؤدي تخصيص الذاكرة ديناميكيًا إلى إنشاء عبء فوق النظام، يتم تنفيذ بعض عمليات التخصيص بشكل متكرر أثناء تنفيذ البرنامج ممّا يؤدي إلى مزيد من النفقات العامة، ممّا يؤدي إلى بطء تنفيذ البرنامج.

لا يتطلب تخصيص الذاكرة الديناميكي دعمًا خاصًا من نظام التشغيل، تقع على عاتق المبرمج مسؤولية تصميم البرنامج بطريقة تستفيد من طريقة تخصيص الذاكرة الديناميكي، وبالتالي فإنّ تخصيص الذاكرة الديناميكي مرن ولكنّه أبطأ من تخصيص الذاكرة الثابت.

مزايا تخصيص الذاكرة الثابت والديناميكي

تخصيص الذاكرة الثابت

  • يوفر تخصيص الذاكرة الثابت طريقة فعّالة لتعيين الذاكرة لعملية ما.
  • تتم جميع عمليات تخصيص الذاكرة قبل بدء التنفيذ، لذلك، لا توجد نفقات عامة لعمليات تخصيص الذاكرة في وقت تنفيذ البرنامج.
  • يوفر تخصيص الذاكرة الثابت تنفيذًا أسرع، لأنّه في وقت التنفيذ لا يتعين عليه إضاعة الوقت في تخصيص الذاكرة للبرنامج.

تخصيص الذاكرة الديناميكي

  • يوفر التخصيص الديناميكي للذاكرة طريقة مرنة لتخصيص الذاكرة لعملية ما.
  • يقلل التخصيص الديناميكي للذاكرة من إهدار الذاكرة لأنّه يعين ذاكرة لعملية أثناء تنفيذ هذا البرنامج، لذلك، فهو على دراية بحجم الذاكرة الدقيق الذي يتطلبه البرنامج.
  • إذا كان البرنامج كبيرًا، فسيتم تنفيذ تخصيص الذاكرة الديناميكي على أجزاء مختلفة من البرنامج، يتم تخصيص الذاكرة لجزء من البرنامج قيد الاستخدام حاليًا، هذا يقلل أيضًا من إهدار الذاكرة ويحسن أداء النظام بالفعل.

عيوب تخصيص الذاكرة الثابت والديناميكي

تخصيص الذاكرة الثابت

  • في تخصيص الذاكرة الثابت، لا يكون النظام على دراية بمتطلبات الذاكرة للبرنامج، لذلك، يجب أن يخمن الذاكرة المطلوبة للبرنامج.
  • يؤدي تخصيص الذاكرة الثابت إلى إهدار الذاكرة، حيث أنّها تقدر حجم الذاكرة المطلوبة من قبل البرنامج، لذلك، إذا كان الحجم المقدر أكبر، فسيؤدي ذلك إلى إهدار الذاكرة، وإلّا إذا كان الحجم المقدر أصغر، فسيتم تنفيذ البرنامج بشكل غير مناسب.

تخصيص الذاكرة الديناميكي

  • طريقة تخصيص الذاكرة الديناميكي لها عبء لتعيين الذاكرة لعملية أثناء وقت تنفيذها.
  • في بعض الأحيان تتكرر إجراءات تخصيص الذاكرة عدة مرات أثناء تنفيذ البرنامج ممّا يؤدي إلى مزيد من النفقات العامة.
  • تؤدي النفقات العامة لتخصيص الذاكرة في وقت تنفيذها إلى إبطاء التنفيذ إلى حد ما.

المصدر: Memory Allocation


شارك المقالة: