في لغات الكمبيوتر، جمع القمامة هو عنصر حاسم في إدارة الذاكرة. هو الإجراء الذي يتم من خلاله التعرف على ذاكرة البرنامج وتحريرها تلقائيًا. تفتقر برمجة C إلى إمكانات جمع البيانات المهملة المضمنة لأنها عبارة عن مستوى منخفض لغة برمجة. ومع ذلك، هناك عدد من المكتبات التي تقدم ميزات جمع البيانات المهملة لبرامج C. في هذه المقالة، سوف نقوم بدراسة جمع البيانات المهملة في لغة C وكيفية تنفيذها باستخدام، بوم-ديمرز-فايزر مكتبة جامع القمامة.
يقدم C آليات إدارة الذاكرة ذات المستوى المنخفض من خلال مالوك () و وظائف مجانية (). . ال طريقة مجانية (). يستخدم لتحرير الذاكرة عندما لم تعد هناك حاجة إليها، في حين أن وظيفة مالوك (). يستخدم لتخصيص الذاكرة بشكل حيوي أثناء وقت التشغيل. بناء الجملة الأساسي لهذه الوظائف هو كما يلي:
void* malloc(size_t size); void free(void* ptr);
يتم إرجاع مؤشر إلى بداية الذاكرة المخصصة بواسطة مالوك () دالة في مقابل وسيطة تحدد عدد البايتات التي سيتم تخصيصها. الذاكرة التي تم تخصيصها مسبقًا بواسطة طريقة مالوك (). تم إصداره بواسطة وظيفة مجانية (). مما يجعلها في متناول مخصصات إضافية.
في حين أن نظام إدارة الذاكرة في لغة C يسمح بالكثير من المرونة، فإنه يضع أيضًا عبء إدارة الذاكرة على عاتق المبرمج. يمكن أن ينتج تسرب الذاكرة عن الاستخدام غير السليم لإجراءات إدارة الذاكرة عندما يتم تخصيص الذاكرة ولكن لا يتم تحريرها مطلقًا أو أخطاء التجزئة، حيث يتم الوصول إلى الذاكرة بعد تحريرها.
مجموعة أدوات الربيع
تقنية إدارة الذاكرة تسمى جمع القمامة يقوم تلقائيًا بتحديد وتحرير الذاكرة التي لم يعد البرنامج يستخدمها. جمع القمامة يجعل من غير الضروري أن يقوم المبرمج بإدارة الذاكرة يدويًا، مما يقلل من مخاطر تسرب الذاكرة وأخطاء التجزئة.
الأبجدية إلى أرقام
بالنسبة لبرنامج C، بوم-ديمرز-فايزر عروض مكتبة جامع القمامة جمع القمامة قدرات. يمكن تخصيص الذاكرة باستخدام مجموعة وظائف المكتبة، والتي يمكن استخدامها أيضًا لتحديد الذاكرة التي لم تعد قيد الاستخدام وتحريرها تلقائيًا. توظف المكتبة أ علامة واكتساح تقنية للعثور على الذاكرة وتحريرها.
بناء الجملة:
بناء الجملة الأساسي لل بوم-ديمرز-فايزر وظائف مكتبة جامع البيانات المهملة هي كما يلي:
#include void* GC_malloc(size_t size); void* GC_calloc(size_tnmemb, size_t size); void* GC_realloc(void* ptr, size_t size); void GC_free(void* ptr);
في بناء الجملة هذا، وظيفة GC_calloc() يستخدم لتخصيص الذاكرة وتهيئتها صفر ، في حين أن وظيفة GC_malloc() يخصص الذاكرة بشكل حيوي. مشابهه ل طريقة Realloc() في ج، GC_realloc() يتم استخدام الوظيفة لإعادة تعيين الذاكرة. يتم تحرير الذاكرة عبر طريقة GC_free() .
دعونا نلقي نظرة على الرسم التوضيحي لل بوم-ديمرز-فايزر مكتبة جامع القمامة في العمل. يستخدم البرنامج التالي وظيفة GC_malloc() لتخصيص ذاكرة لكل عقدة أثناء إنشاء قائمة مرتبطة من الأعداد الصحيحة. بعد ذلك، تتم طباعة قيم القائمة المرتبطة، ثم ينتهي البرنامج.
حلقة لا نهائية
#include #include typedef struct node { int value; struct node* next; } node; int main() { GC_INIT(); node* head = GC_malloc(sizeof(node)); node* current = head; for (int i = 1; ivalue = i; current->next = GC_malloc(sizeof(node)); current = current->next; } current->next = NULL; current = head; while (current != NULL) { printf('%d ', current->value); current = current->next; } return 0; }
انتاج:
يتم إنتاج الإخراج التالي عند تشغيل البرنامج:
1 2 3 4 5 6 7 8 9 10
توضيح:
في هذا المثال، نستخدم أولاً GC_INIT() وظيفة لتهيئة جامع البيانات المهملة. بعد ذلك، يتم إنشاء العقدة الرئيسية للقائمة المرتبطة باستخدام طريقة GC_malloc() ، ويتم تغيير المؤشر الحالي للإشارة إليه. الخطوة التالية هي استخدام حلقة لإضافة المزيد من العقد إلى القائمة المرتبطة، وتعيين قيمة كل عقدة لعداد الحلقة المتغير ط والمؤشر التالي للعقدة بعدها في القائمة. من أجل الإشارة إلى نهاية القائمة، قمنا أخيرًا بتعيين المؤشر التالي للعقدة الأخيرة في القائمة على باطل .
باستخدام أ حائط اللوب لتصفح القائمة وطباعة قيمة كل عقدة، ومن ثم نقوم بطباعة القيم الموجودة في القائمة المرتبطة. أخيرا نحن العودة 0 لإثبات أن البرنامج تم تشغيله بنجاح.
خاتمة
في مقالة المدونة هذه، نظرنا إلى بوم-ديمرز-فايزر تنفيذ مكتبة جامع البيانات المهملة لجمع البيانات المهملة في لغة C. لقد فحصنا البنية الأساسية لوظائف مكتبة جامع البيانات المهملة وأظهرنا كيفية استخدامها في برنامج مثال مباشر. تحدثنا أيضًا عن مخرجات البرنامج النموذجي وأهميته.
إجمالي، جمع القمامة يعد هذا أسلوبًا حاسمًا يمكن أن يساعد مبرمجي لغة C في إدارة الذاكرة بشكل أفضل وأكثر فعالية. يمكن لمبرمجي C الاستفادة من جمع البيانات المهملة أثناء استخدام لغة منخفضة المستوى باستخدام بوم-ديمرز-فايزر حزمة جامع القمامة.
كيفية تحويل السلسلة إلى عدد صحيح جافا