ذاكرة خالية في C مع وظيفة حرة

Free Memory C With Free Function



لغة C فعالة بما يكفي للتعامل مع إدارة الذاكرة الخاصة بها. هذا يعني أنه عندما تعلن عن متغير عادي من أي نوع بيانات في C ، فإن لغة البرمجة نفسها مسؤولة عن إلغاء تخصيص أو تحرير هذه الذاكرة بمجرد تنفيذ برنامجك بنجاح. ومع ذلك ، في حالة تخصيص الذاكرة الديناميكي ، نظرًا لأنك تقوم بتخصيص الذاكرة يدويًا ، فهذا هو السبب في أنه يتعين عليك أيضًا تحريرها بنفسك.

في مكتبة stdlib.h ، توجد وظيفة مخصصة لخدمة هذا الغرض ، أي الوظيفة () المجانية. اليوم ، سوف نستكشف الحاجة إلى استخدام هذه الوظيفة في لغة البرمجة سي. بعد ذلك ، سنلقي نظرة على بعض الأمثلة التي تم فيها استخدام هذه الوظيفة لتحرير الذاكرة يدويًا بلغة البرمجة C في Linux.







الحاجة إلى استخدام الوظيفة المجانية في C لتحرير ذاكرة النظام:

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



خلاف ذلك ، فإننا في نهاية المطاف سوف نفد من الذاكرة ، ولن نقوم بتشغيل برامجنا أكثر من ذلك. هذا هو المكان الذي يتم فيه تشغيل الوظيفة المجانية () لمكتبة stdlib.h. نستخدم هذه الوظيفة في نهاية البرنامج مباشرة قبل بيان الإرجاع ، لذا يجب إعادة ذاكرة الكومة إلى نظام الكمبيوتر قبل إنهاء البرنامج.



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





الصيغة العامة للدالة free () في لغة البرمجة C هي كما يلي:

فارغمجانا (فارغ*ptr)

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



أمثلة على استخدام الوظيفة الحرة في لغة سي:

يمكن استخدام الوظيفة free () مع جميع وظائف تخصيص الذاكرة الثلاث لمكتبة stdlib.h ، أي malloc و calloc و realloc. يعد استخدام هذه الوظيفة إلزاميًا بعد تحديد الوظيفة الأساسية لبرنامجك حتى تتمكن من تسليم ذاكرة الكومة التي خصصتها ديناميكيًا أثناء تنفيذ البرنامج إلى نظام الكمبيوتر الخاص بك. الآن ، دعونا نلقي نظرة على بعض الأمثلة التي تم فيها استخدام الوظيفة free () مع وظائف malloc و calloc في لغة البرمجة C.

المثال الأول: استخدام الوظيفة المجانية مع calloc في لغة C:

تمت مشاركة رمز C الخاص باستخدام وظيفة free () مع وظيفة calloc () في الصورة أدناه:

كان الغرض الأساسي من هذا الرمز هو تخصيص بعض الذاكرة ديناميكيًا بمساعدة وظيفة calloc (). لذلك ، أخذنا حجم الذاكرة الديناميكية وقيم هذه الذاكرة الديناميكية كمدخلات من المستخدم. بعد ذلك ، كنا نعتزم طباعة القيم المكتسبة على الجهاز. بعد هذا الرمز بالكامل ، لدينا وظيفة () المجانية التي ستطلق الذاكرة الديناميكية المخصصة بسبب تنفيذ برنامج C الخاص بنا.

يتم عرض نسخة معدلة قليلاً من نفس الكود أيضًا في الصورة المذكورة أدناه:

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

المثال الثاني: استخدام الوظيفة المجانية مع malloc في لغة C:

تمت مشاركة رمز C لاستخدام الوظيفة () المجانية مع وظيفة malloc () في الصورة الملحقة أدناه:

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

استنتاج:

أكدت هذه المقالة على أهمية استخدام وظيفة free () في لغة برمجة C في Linux. يعتقد معظم المستخدمين أن وظائف التخصيص لملف stdlib.h أكثر أهمية ؛ ومع ذلك ، من خلال استعراض هذه المقالة ، يمكنك أن ترى بوضوح أن الوظيفة المجانية () لا تقل أهمية. سيساعدك ذلك على تحرير الذاكرة المكتسبة ديناميكيًا والتأكد من عدم نفاد الذاكرة أبدًا كلما حاولت تنفيذ برامجك في المستقبل.