English  

كتب dynamic memory allocation

اذا لم تجد ما تبحث عنه يمكنك استخدام كلمات أكثر دقة.

عرض المزيد

تخصيص الذاكرة الديناميكية (معلومة)


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

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

/* مادة مخزون الأجزاء */ struct Item { int id; /* رقم الجزء */ char * name; /* اسم الجزء */ float cost; /* التكلفة */ }; /* تخصيص وتهيئة مادة جديدة */ struct Item * make_item(const char *name) { struct Item * item; /* تخصيص مادة كائن جديد وإعادة شكله */ item = malloc(sizeof(struct Item)); if (item == NULL) return NULL; /* تهيئة أعضاء البند الجديد */ memset(item, 0, sizeof(struct Item)); item->id = -1; item->name = NULL; item->cost = 0.0; /* احفظ نسخة من الاسم في البند الجديد */ item->name = malloc(strlen(name) + 1); if (item->name == NULL) { free(item); return NULL; } strcpy(item->name, name); /* إعادة مادة الكائن المُضاف حديثاً */ return item; }

يُوضح الكود التالي كيفية عدم تخصيص كائنات الذاكرة ديناميكياً أي إعادتها إلى الكومة heap أو منطقة التخزين الحر. تُوفر المكتبة القياسية للغة C وظيفة free() لعدم تخصيص كقالب الذاكرة المخصصة مسبقاً وإعادتها إلى الكومة heap. * عدم تخصيص مادة الكائن* void destroy_item(struct item *item) { * البحث عن مؤشر الكائن null *

if (item == NULL) return;

* عدم تخصيص سلسلة الاسم المحفوظة داخل المادة *

if (item->name != NULL) { free(item->name); item->name = NULL; }

* عدم تخصيص المادة نفسها * free(item); }

المصدر: wikipedia.org
 
(23)
الذاكرة

الذاكرة

 

 
(5)
الذاكرة

الذاكرة