العودة إلى الدورة

تخصيص الذاكرة الديناميكي (DMA): malloc() و calloc()

لغة C: من الصفر إلى الاحتراف - الدليل الشامل للمبتدئين

الدرس 38: تخصيص الذاكرة الديناميكي (DMA): malloc() و calloc()

يتم تخصيص المتغيرات العادية في المكدس (stack) بحجم ثابت. يتم تخصيص الذاكرة الديناميكية في الكومة (Heap) أثناء وقت التشغيل، مما يسمح للبرامج بإدارة أحجام الذاكرة بناءً على مدخلات المستخدم أو الاحتياجات التشغيلية. نستخدم مكتبة <stdlib.h> للـ DMA.

1. دالة malloc() (تخصيص الذاكرة)

تخصص كتلة من الذاكرة بالحجم المحدد (بالبايت) وتعيد مؤشراً من نوع void * إلى بداية الكتلة. إذا فشل التخصيص، فإنها تعيد NULL.

القاعدة: (type *) malloc(size_in_bytes);

c #include <stdlib.h>

// تخصيص مساحة لـ 10 أعداد صحيحة int *arr_ptr = (int *) malloc(10 * sizeof(int));

if (arr_ptr == NULL) { // معالجة الخطأ }

// تحتوي كتلة الذاكرة المخصصة على قيم عشوائية (garbage values).

2. دالة calloc() (تخصيص متجاور)

تخصص ذاكرة لمصفوفة من العناصر. تقوم بتهيئة جميع البايتات في المساحة المخصصة إلى الصفر.

القاعدة: (type *) calloc(number_of_elements, size_of_each_element);

c // تخصيص مساحة لـ 10 أعداد صحيحة وتهيئتها بالصفر int *arr_ptr_zero = (int *) calloc(10, sizeof(int));

الفرق الرئيسي: تخصص malloc ذاكرة خام (بيانات عشوائية)؛ بينما تخصص calloc الذاكرة وتصفرها.