تخصيص الذاكرة الثابتة مقابل الديناميكية في لغة C: الفرق والمقارنة

الوجبات السريعة الرئيسية

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

ما هو تخصيص الذاكرة الثابتة في لغة C؟

يشير تخصيص الذاكرة الثابتة في لغة C إلى تخصيص الذاكرة للمتغيرات أو هياكل البيانات أثناء مرحلة الترجمة، قبل تنفيذ البرنامج. تظل الذاكرة المخصصة باستخدام التخصيص الثابت ثابتة طوال فترة تنفيذ البرنامج ويتم تحديدها في وقت الترجمة. يتناقض هذا مع تخصيص الذاكرة الديناميكي، حيث يتم تخصيص الذاكرة في وقت التشغيل باستخدام وظائف مثل malloc() ويمكن تغيير حجمها أو إلغاء تخصيصها حسب الحاجة.

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

ما هو تخصيص الذاكرة الديناميكية في لغة C؟

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

اقرأ أيضا:  NTLM مقابل Kerberos: الفرق والمقارنة

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

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

  1. يتم تخصيص الذاكرة الثابتة أثناء وقت الترجمة قبل بدء تشغيل البرنامج. يتم تخصيص الذاكرة الديناميكية أثناء وقت التشغيل أثناء تنفيذ البرنامج.
  2. يتم تحديد حجم الذاكرة الثابتة في وقت الترجمة ويظل ثابتًا طوال تنفيذ البرنامج. يمكن تحديد حجم الذاكرة الديناميكية في وقت التشغيل وتغييره أثناء تنفيذ البرنامج.
  3. تعتبر الحالة الثابتة أقل مرونة، حيث أن تخصيص الذاكرة ثابت ولا يمكن تغييره أثناء وقت التشغيل. تعد الديناميكية أكثر مرونة، حيث يمكن تخصيص الذاكرة وتغيير حجمها وإلغاء تخصيصها حسب الحاجة.
  4. يتم تخصيص المتغيرات الثابتة بشكل ثابت ولها عمر يمتد إلى تنفيذ البرنامج بأكمله. يتم تخصيص الذاكرة الديناميكية ديناميكيًا وتكون موجودة فقط طالما يحتفظ البرنامج بمرجع إليها؛ يمكن تحريره باستخدام free().
  5. يدير المترجم ثابت؛ لا يتطلب المبرمج إدارة واضحة للذاكرة. يتطلب الديناميكي تخصيصًا صريحًا للذاكرة وإلغاء التخصيص باستخدام وظائف مثل malloc() وcalloc() وrealloc() وfree().

مقارنة بين تخصيص الذاكرة الثابتة والديناميكية في لغة C

معلمات المقارنةتخصيص الذاكرة الثابتةتخصيص الذاكرة الديناميكي
التهيئةتتم تهيئة المتغيرات إلى القيم الافتراضية (صفر للمتغيرات العامة والثابتة).تحتوي الذاكرة المخصصة ديناميكيًا على قيم غير محددة؛ يحتاج إلى تهيئة صريحة.
موقع الذاكرةيتم تخصيص الذاكرة في جزء البيانات من البرنامج.يتم تخصيص الذاكرة في مقطع الكومة من مساحة ذاكرة البرنامج.
حجم الصفيفيجب أن يكون حجم المصفوفة معروفًا في وقت الترجمة؛ حجم ثابت.يمكن تغيير حجم المصفوفات ديناميكيًا باستخدام realloc().
فوقحمل أقل، حيث يتم تخصيص الذاكرة مرة واحدة أثناء بدء تشغيل البرنامج.المزيد من الحمل بسبب تخصيص وقت التشغيل وتجزئة الذاكرة المحتملة.
النطاق والوصوليمكن الوصول إلى المتغيرات ضمن نطاق كل منها.يمكن تمرير الذاكرة المخصصة ديناميكيًا حول الوظائف، مما يزيد من نطاقها.
مراجع حسابات
  1. https://ieeexplore.ieee.org/abstract/document/6807799/
  2. https://inria.hal.science/hal-02456533/document
اقرأ أيضا:  VB مقابل VBScript: الفرق والمقارنة
النقطة 1
قم بتثبيت هذا الآن لتتذكره لاحقًا
يعلق هذا
طلب واحد؟

لقد بذلت الكثير من الجهد في كتابة منشور المدونة هذا لتقديم قيمة لك. سيكون مفيدًا جدًا بالنسبة لي ، إذا كنت تفكر في مشاركته على وسائل التواصل الاجتماعي أو مع أصدقائك / عائلتك. المشاركة هي ♥ ️

سانديب بهانداري
سانديب بهانداري

سانديب بهانداري حاصل على بكالوريوس هندسة في الحاسبات من جامعة ثابار (2006). لديه 20 عامًا من الخبرة في مجال التكنولوجيا. لديه اهتمام كبير في المجالات التقنية المختلفة ، بما في ذلك أنظمة قواعد البيانات وشبكات الكمبيوتر والبرمجة. يمكنك قراءة المزيد عنه على موقعه صفحة بيو.

اترك تعليق

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *

هل تريد حفظ هذه المقالة لوقت لاحق؟ انقر فوق القلب الموجود في الزاوية اليمنى السفلية للحفظ في مربع المقالات الخاصة بك!