الفرق بين الجديد و malloc ()

مؤلف: Laura McKinney
تاريخ الخلق: 1 أبريل 2021
تاريخ التحديث: 23 أبريل 2024
Anonim
Data Structures - Lesson 5 - malloc
فيديو: Data Structures - Lesson 5 - malloc

المحتوى


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

  1. رسم بياني للمقارنة
  2. تعريف
  3. الاختلافات الرئيسية
  4. خاتمة

رسم بياني للمقارنة

أساس للمقارنةجديدmalloc ()
لغةالمشغل الجديد هو ميزة محددة في C ++ و Java و C #. وظيفة malloc () هي ميزة C.
طبيعة"الجديد" هو المشغل.malloc () هي وظيفة.
حجم( )الجديد لا يحتاج إلى مشغل sizeof asit تخصيص ذاكرة كافية لنوع معين يتطلب malloc على مشغل sizeof معرفة حجم الذاكرة المخصص له.
البناء يمكن للمشغل الجديد استدعاء مُنشئ كائن.malloc () لا يمكن على الإطلاق إجراء مكالمة إلى مُنشئ.
التهيئةيمكن للمشغل الجديد تهيئة كائن أثناء تخصيص الذاكرة له.تعذر إجراء تهيئة الذاكرة في malloc.
الحمولة الزائدة المشغل الجديد يمكن طاقتها.لا يمكن تحميل malloc () مطلقًا.
بالفشلعند الفشل ، المشغل الجديد يلقي استثناء.عند الفشل ، تقوم malloc () بإرجاع NULL.
إلغاء تخصيصتخصيص الذاكرة الجديدة ، غير المخصصة باستخدام "حذف".يتم تخصيص تخصيص الذاكرة بواسطة malloc () باستخدام دالة حرة ().
إعادة توزيعالمشغل الجديد لا يعيد تخصيص الذاكرة.يمكن تخصيص الذاكرة المخصصة بواسطة malloc () باستخدام realloc ().
إعدامالمشغل الجديد يقطع وقت التنفيذ.يتطلب malloc () مزيدًا من الوقت للتنفيذ.


تعريف جديد

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

اكتب variable_name = نوع جديد (معلمة)

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

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


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

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

تعريف malloc ()

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

اكتب variable_name = (type *) malloc (sizeof (type)) ؛

هنا ، يشير "النوع" إلى نوع البيانات للمتغير الذي يجب تخصيص الذاكرة له. اسم متغير هو اسم المتغير المرجعي الذي سيتم تعيين المؤشر الذي تم إرجاعه بواسطة malloc (). يصف (النوع *) نوع الصب للحصول على مؤشر للذاكرة في نوع معين. يصف sizeof () malloc () ، ما هو حجم الذاكرة المطلوبة.

يتطلب malloc () النوع casting لأن المؤشر الذي تم إرجاعه بواسطة malloc () من النوع الفارغ ، لذلك ، لتعيين نوع إلى المؤشر ، مطلوب casting type. مطلوب sizeof () لأن الدالة malloc () تقوم بتخصيص ذاكرة خام وبالتالي ، فمن الضروري إعلام الدالة malloc () بحجم الذاكرة التي يجب تخصيصها. إذا كانت الذاكرة المخصصة غير كافية ، فيمكن تغيير حجمها أو إعادة تخصيصها باستخدام realloc ().

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

يتم تخصيص الذاكرة المخصصة بواسطة الدالة malloc () باستخدام free (). نظرًا لأن استدعاء الوظيفة يؤدي إلى حمل ، تتطلب malloc () مزيدًا من الوقت للتنفيذ.

  1. المشغل الجديد عبارة عن بنية مقدمة في C ++ وتستخدم في Java و C # ، إلخ. من ناحية أخرى ، تعد malloc () دالة مكتبة قياسية موجودة فقط في لغة C وتدعمها C ++.
  2. يخصص المشغل الجديد ذاكرة كافية للكائن من النوع المحدد لذلك ، لا يحتاج إلى عامل تغيير حجم. من ناحية أخرى ، تتطلب وظيفة malloc () عامل sizeof () للسماح للدالة بمعرفة حجم الذاكرة الذي يجب تخصيصه له.
  3. يمكن للمشغل الجديد استدعاء مُنشئ الكائن أثناء الإعلان. من ناحية أخرى ، لا يمكن استدعاء الدالة malloc () المنشئ.
  4. المشغل 'الجديد' يمكن أن يكون مثقلًا ولكن malloc () لا يمكن.
  5. إذا فشل المشغل الجديد في تخصيص الذاكرة ، فإنه يلقي استثناءً يجب معالجته بواسطة الكود الآخر الذي سينتهي البرنامج. من ناحية أخرى ، ترجع الدالة malloc () مؤشر NULL إذا فشلت في تخصيص الذاكرة. إذا تم استخدام المؤشر دون تحديد هذا ، فسيؤدي ذلك إلى تعطل النظام.
  6. يمكن تخصيص الذاكرة المخصصة باستخدام مشغل جديد باستخدام "حذف". من ناحية أخرى ، يمكن تخصيص الذاكرة المخصصة باستخدام وظيفة malloc () باستخدام free ().
  7. بمجرد تخصيص الذاكرة باستخدام مشغل جديد ، لا يمكن تغيير حجمها على أي حال. من ناحية أخرى ، يمكن إعادة تخصيص الذاكرة المخصصة باستخدام وظيفة malloc () (تغيير حجمها) باستخدام وظيفة realloc ().
  8. وقت تنفيذ الجديد أقل بالمقارنة مع malloc () لأن malloc دالة والجديد عبارة عن بنية.

خاتمة:

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