Logo ar.removalsclassifieds.com

الفرق بين مالوك والجديد (مع الجدول)

جدول المحتويات:

Anonim

Malloc هي ميزة في لغة C بينما الجديدة هي ميزة أساسية في C ++. Malloc هو في الأساس وظيفة قياسية بينما الجديد هو عامل. لا ينبغي استخدام Malloc في C ++ بدون سبب أساسي. يجب عدم خلط جديد / حذف مع malloc / free. على عكس malloc الجديد لا يحتاج إلى حجم المشغل.

مالوك مقابل الجديد

يتمثل الاختلاف الرئيسي بين malloc () والجديد () في أن الوظيفة السابقة هي دالة C قياسية والأخيرة عامل لا يمكن استخدامه إلا في C ++. يمكن ويجب استخدام Malloc فقط في C ++ عندما يكون هناك سبب وجيه لذلك. الجديد يسمح بالتجاوز ولكن malloc لا يسمح به قانونيا.

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

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

مقارنة بين مالوك والجديد في شكل جدولي

معلمات المقارنة

مالوك

جديد

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

ما هو مالوك؟

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

التركيب اللغوي: - ptr = (castType *) malloc (size) ؛

ما الجديد؟

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

التركيب النحوي: - pointer-variable = new data-type ؛

الاختلافات الرئيسية بين مالوك والجديد

استنتاج

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

مراجع

الفرق بين مالوك والجديد (مع الجدول)