Dynamisk hukommelsestildeling i C
Konceptet med dynamisk hukommelsesallokering i c-sprog gør det muligt for C-programmøren at allokere hukommelse under kørsel . Dynamisk hukommelsesallokering i c-sprog er mulig med 4 funktioner i stdlib.h header-fil.
- malloc()
- calloc()
- realloc()
- gratis()
Før vi lærer ovenstående funktioner, lad os forstå forskellen mellem statisk hukommelsesallokering og dynamisk hukommelsesallokering.
| statisk hukommelsesallokering | dynamisk hukommelsesallokering |
|---|---|
| hukommelse tildeles på kompileringstidspunktet. | hukommelse tildeles ved kørsel. |
| hukommelsen kan ikke øges, mens programmet køres. | hukommelsen kan øges, mens programmet udføres. |
| bruges i array. | brugt i linket liste. |
Lad os nu tage et hurtigt kig på de metoder, der bruges til dynamisk hukommelsesallokering.
| malloc() | tildeler enkelt blok af anmodet hukommelse. |
| calloc() | allokerer flere blok af anmodet hukommelse. |
| realloc() | omallokerer hukommelsen optaget af malloc()- eller calloc()-funktioner. |
| gratis() | frigør den dynamisk allokerede hukommelse. |
malloc() funktion i C
Malloc()-funktionen tildeler en enkelt blok af anmodet hukommelse.
Den initialiserer ikke hukommelse ved udførelsestidspunktet, så den har oprindeligt skraldværdi.
Det returnerer NULL, hvis hukommelsen ikke er tilstrækkelig.
Syntaksen for malloc()-funktionen er angivet nedenfor:
ptr=(cast-type*)malloc(byte-size)
Lad os se eksemplet med malloc()-funktionen.
#include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d',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's see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d',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'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's see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)> calloc() funktion i C
Calloc()-funktionen allokerer flere blokke af anmodet hukommelse.
Det initialiserer i første omgang alle bytes til nul.
Det returnerer NULL, hvis hukommelsen ikke er tilstrækkelig.
Syntaksen for calloc()-funktionen er angivet nedenfor:
ptr=(cast-type*)calloc(number, byte-size)
Lad os se eksemplet med calloc()-funktionen.
#include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d',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'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's see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)> realloc() funktion i C
Hvis hukommelsen ikke er tilstrækkelig til malloc() eller calloc(), kan du omallokere hukommelsen ved hjælp af realloc()-funktionen. Kort sagt ændrer det hukommelsesstørrelsen.
Lad os se syntaksen for realloc()-funktionen.
ptr=realloc(ptr, new-size)
free() funktion i C
Hukommelsen optaget af malloc()- eller calloc()-funktioner skal frigives ved at kalde free()-funktionen. Ellers vil den optage hukommelse, indtil programmet afsluttes.
Lad os se syntaksen for free()-funktionen.
free(ptr)