لماذا عملية تحرير الذاكرة بطيئة جدا بالنسبة للحجز؟

السلام عليكم

في هدا الكود

t = time(0);
for (size_t i = 0; i < 100000; i++)
    tab[i] = new(int);
printf("new: %f\n", difftime(time(0),t));

t = time(0);
for (size_t i = 0; i < 100000; i++)
    delete tab[i];
printf("delete: %f\n", difftime(time(0), t));

كانت النتيجة كالتالي

new: 0.000000

delete: 5.000000

وتجربة أخرى أعطت

new: 9.000000

delete: 552.000000

تقريبا نفس النتيجة باستخدام malloc/free

يعني أن وقت تحرير الذاكرة أبطئ بكثير من وقت الحجز ما السبب؟

أنا كنت أضن العكس لأنني أعتقد أن الحجز يتطلب عملية بحت عن مكان فارغ في الذاكرة عكس التحرير

المرجو التوضيح

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

ببساطة قارن تحرير الذاكرة با الحجز و بملئ الذاكرة وليس الحجز فقط.

مادا تعني ؟

هل يتم تصفير الداكرة بعد تحريرها ؟؟؟

جرب هذه الأشياء:

time ليست طريقة مناسبة لقياس سرعة شيء. جرب clock لو أنت على نظام يونيكس أو إحدى دوال الوقت الجديدة في سي++11

هل البرنامج مترجم في وضع release mode؟

جرب أن تعدل القيمة مرة بدخل اللوب الاول ومرة أخرى دخل اللوب الثاني.

راجع الاسمبلي الناتج لكي تتأكد أن الكومبيلر لم يفعل أشياء غير متوقعة

إستخدم volatile عند تعريف tab