logo

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

مفهوم تخصيص الذاكرة الديناميكية بلغة C تمكن مبرمج C من تخصيص الذاكرة في وقت التشغيل . يمكن تخصيص الذاكرة الديناميكية بلغة C من خلال 4 وظائف لملف الرأس stdlib.h.

  1. مالوك ()
  2. كالوك ()
  3. إعادة تخصيص ()
  4. حر()

قبل تعلم الوظائف المذكورة أعلاه، دعونا نفهم الفرق بين تخصيص الذاكرة الثابتة وتخصيص الذاكرة الديناميكية.

تخصيص الذاكرة الثابتةتخصيص الذاكرة الديناميكية
يتم تخصيص الذاكرة في وقت الترجمة.يتم تخصيص الذاكرة في وقت التشغيل.
لا يمكن زيادة الذاكرة أثناء تنفيذ البرنامج.يمكن زيادة الذاكرة أثناء تنفيذ البرنامج.
المستخدمة في المصفوفة.المستخدمة في القائمة المرتبطة.

الآن دعونا نلقي نظرة سريعة على الطرق المستخدمة لتخصيص الذاكرة الديناميكية.

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

وظيفة malloc () في C

تقوم الدالة malloc() بتخصيص كتلة واحدة من الذاكرة المطلوبة.

لا يقوم بتهيئة الذاكرة في وقت التنفيذ، لذا فهو يحتوي على قيمة غير مرغوب فيها في البداية.

تقوم بإرجاع NULL إذا كانت الذاكرة غير كافية.

بناء جملة الدالة malloc() موضح أدناه:

 ptr=(cast-type*)malloc(byte-size) 

دعونا نرى مثال الدالة malloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let&apos;s see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)>

وظيفة calloc () في C

تقوم الدالة calloc() بتخصيص كتلة متعددة من الذاكرة المطلوبة.

يقوم في البداية بتهيئة كافة البايتات إلى الصفر.

تقوم بإرجاع NULL إذا كانت الذاكرة غير كافية.

بناء جملة الدالة calloc() موضح أدناه:

 ptr=(cast-type*)calloc(number, byte-size) 

دعونا نرى مثال وظيفة calloc().

 #include #include int main(){ int n,i,*ptr,sum=0; printf(&apos;Enter number of elements: &apos;); scanf(&apos;%d&apos;,&amp;n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf(&apos;Sorry! unable to allocate memory&apos;); exit(0); } printf(&apos;Enter elements of array: &apos;); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d&apos;,sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let&apos;s see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let&apos;s see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)>

وظيفة realloc() في C

إذا كانت الذاكرة غير كافية لـ malloc() أو calloc()، فيمكنك إعادة تخصيص الذاكرة بواسطة وظيفة realloc(). باختصار، يغير حجم الذاكرة.

دعونا نرى بناء جملة وظيفة realloc().

foreach حلقة الآلة الكاتبة
 ptr=realloc(ptr, new-size) 

وظيفة مجانية () في C

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

دعونا نرى بناء جملة الدالة free().

 free(ptr)