Latest web development tutorials

إدارة الذاكرة C

وهذا الفصل شرح إدارة الذاكرة الديناميكية مئوية. لغة C لتخصيص وإدارة الذاكرة يوفر العديد من الوظائف. ويمكن الاطلاع على هذه الوظائف في<stdlib.h> ملف الرأس.

序号函数和描述
1void *calloc(int num, int size);
该函数分配一个带有num个元素的数组,每个元素的大小为size字节。
2void free(void *address);
该函数释放 address 所指向的h内存块。
3void *malloc(int num);
该函数分配一个num字节的数组,并把它们进行初始化。
4void *realloc(void *address, int newsize);
该函数重新分配内存,把内存扩展到newsize

تخصيص الذاكرة الديناميكية

عندما البرمجة، إذا كنت تعرف مسبقا حجم المصفوفة، تعريف المصفوفة أسهل. على سبيل المثال، مجموعة لتخزين الأسماء التي تستوعب ما يصل إلى 100 حرفا، حتى تتمكن من تحديد مجموعة، على النحو التالي:

char name[100];

ومع ذلك، إذا كنت لا تعرف مقدما طول النص ليتم تخزينها، مثل وصفا مفصلا لموضوع يتصل متجرك. هنا، نحن بحاجة إلى تحديد مؤشر يشير إلى غير معروف حجم الحرف تعلمت الذاكرة، ومن ثم متابعة تخصيص الذاكرة على الطلب، على النحو التالي:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

يمكن للبرنامج المذكور أعلاه أيضا استخدامcalloc () لكتابة، تحتاج فقط إلى استبدال calloc malloc، كما هو مبين أدناه:

calloc(200, sizeof(char));

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

إعادة ضبط حجم الذاكرة والذاكرة

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

بدلا من ذلك، يمكنك استدعاءrealloc وظيفة ()لزيادة أو إنقاص حجم كتلة الذاكرة المخصصة. دعونا نستخدم realloc () ومجانا () وظيفة، والنظر مرة أخرى في المثال أعلاه:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char name[100];
   char *description;

   strcpy(name, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student.");
   }
   /* 假设您想要存储更大的描述信息 */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* 使用 free() 函数释放内存 */
   free(description);
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

لا يمكنك محاولة إعادة تخصيص ذاكرة إضافية، strcat () وظيفة يولد خطأ بسبب عدم كفاية وصف تخزين الذاكرة المتوفرة.