logo

הקצאת זיכרון דינמי ב-C

הקונספט של הקצאת זיכרון דינמית בשפת c מאפשר למתכנת C להקצות זיכרון בזמן ריצה . הקצאת זיכרון דינמית בשפת c אפשרית על ידי 4 פונקציות של קובץ הכותרת stdlib.h.

  1. malloc()
  2. calloc()
  3. realloc()
  4. חינם()

לפני שנלמד את הפונקציות לעיל, בואו נבין את ההבדל בין הקצאת זיכרון סטטי להקצאת זיכרון דינמית.

הקצאת זיכרון סטטיהקצאת זיכרון דינמית
הזיכרון מוקצה בזמן ההידור.זיכרון מוקצה בזמן ריצה.
לא ניתן להגדיל את הזיכרון בזמן הפעלת התוכנית.ניתן להגדיל את הזיכרון בזמן הפעלת התוכנית.
בשימוש במערך.בשימוש ברשימה מקושרת.

עכשיו בואו נסתכל במהירות על השיטות המשמשות להקצאת זיכרון דינמית.

malloc() מקצה בלוק בודד של זיכרון מבוקש.
calloc() מקצה מספר בלוק של זיכרון מבוקש.
realloc() מקצה מחדש את הזיכרון שנכבש על ידי פונקציות 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() .

 ptr=realloc(ptr, new-size) 

הפונקציה free() ב-C

יש לשחרר את הזיכרון שנכבש על ידי פונקציות malloc() או calloc() על ידי קריאה לפונקציה free(). אחרת, הוא יצרוך זיכרון עד ליציאת התוכנית.

בוא נראה את התחביר של הפונקציה free() .

 free(ptr)