Koncept dinamička dodjela memorije u c jeziku omogućuje C programeru da alocira memoriju tijekom izvođenja . Dinamička dodjela memorije u c jeziku moguća je pomoću 4 funkcije datoteke zaglavlja stdlib.h.
- malloc()
- calloc()
- realloc()
- besplatno()
Prije nego što naučimo gornje funkcije, shvatimo razliku između statičke dodjele memorije i dinamičke dodjele memorije.
statička dodjela memorije | dinamička dodjela memorije |
---|---|
memorija se dodjeljuje tijekom kompajliranja. | memorija se dodjeljuje tijekom izvođenja. |
memorija se ne može povećati tijekom izvođenja programa. | memorija se može povećati tijekom izvođenja programa. |
koristi se u nizu. | koristi se u povezanom popisu. |
Pogledajmo sada na brzinu metode korištene za dinamičku dodjelu memorije.
java int kao niz
malloc() | dodjeljuje jedan blok tražene memorije. |
calloc() | dodjeljuje više blokova tražene memorije. |
realloc() | ponovno dodjeljuje memoriju koju zauzimaju funkcije malloc() ili calloc(). |
besplatno() | oslobađa dinamički dodijeljenu memoriju. |
funkcija malloc() u C-u
Funkcija malloc() dodjeljuje jedan blok tražene memorije.
Ne inicijalizira memoriju u vrijeme izvođenja, tako da u početku ima vrijednost smeća.
Vraća NULL ako memorija nije dovoljna.
Sintaksa funkcije malloc() data je u nastavku:
ptr=(cast-type*)malloc(byte-size)
Pogledajmo primjer funkcije malloc().
#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)>
funkcija calloc() u C-u
Funkcija calloc() dodjeljuje više blokova tražene memorije.
U početku inicijalizira sve bajtove na nulu.
Vraća NULL ako memorija nije dovoljna.
Sintaksa funkcije calloc() dana je u nastavku:
ptr=(cast-type*)calloc(number, byte-size)
Pogledajmo primjer funkcije calloc().
#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)>
funkcija realloc() u C-u
Ako memorija nije dovoljna za malloc() ili calloc(), možete ponovno dodijeliti memoriju pomoću funkcije realloc(). Ukratko, mijenja veličinu memorije.
Pogledajmo sintaksu funkcije realloc().
novi redak python
ptr=realloc(ptr, new-size)
funkcija free() u C-u
Memorija koju zauzimaju funkcije malloc() ili calloc() mora se osloboditi pozivom funkcije free(). U protivnom će trošiti memoriju do izlaska iz programa.
Pogledajmo sintaksu funkcije free().
free(ptr)