Allocazione dinamica della memoria in C
Il concetto di allocazione dinamica della memoria in linguaggio c consente al programmatore C di allocare memoria in fase di esecuzione . L'allocazione dinamica della memoria in linguaggio C è possibile tramite 4 funzioni del file di intestazione stdlib.h.
- malloc()
- calloc()
- rialloc()
- gratuito()
Prima di apprendere le funzioni di cui sopra, comprendiamo la differenza tra allocazione di memoria statica e allocazione di memoria dinamica.
| allocazione di memoria statica | allocazione dinamica della memoria |
|---|---|
| la memoria viene allocata in fase di compilazione. | la memoria viene allocata in fase di esecuzione. |
| la memoria non può essere aumentata durante l'esecuzione del programma. | la memoria può essere aumentata durante l'esecuzione del programma. |
| utilizzato nell'array. | utilizzato nell'elenco collegato. |
Ora diamo una rapida occhiata ai metodi utilizzati per l'allocazione dinamica della memoria.
| malloc() | alloca un singolo blocco di memoria richiesta. |
| calloc() | alloca più blocchi di memoria richiesta. |
| rialloc() | rialloca la memoria occupata dalle funzioni malloc() o calloc(). |
| gratuito() | libera la memoria allocata dinamicamente. |
Funzione malloc() in C
La funzione malloc() alloca un singolo blocco di memoria richiesta.
Non inizializza la memoria in fase di esecuzione, quindi inizialmente ha un valore spazzatura.
Restituisce NULL se la memoria non è sufficiente.
La sintassi della funzione malloc() è riportata di seguito:
ptr=(cast-type*)malloc(byte-size)
Vediamo l'esempio della funzione 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)> funzione calloc() in C
La funzione calloc() alloca più blocchi di memoria richiesta.
Inizialmente inizializza tutti i byte a zero.
Restituisce NULL se la memoria non è sufficiente.
La sintassi della funzione calloc() è riportata di seguito:
ptr=(cast-type*)calloc(number, byte-size)
Vediamo l'esempio della funzione 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)> funzione realloc() in C
Se la memoria non è sufficiente per malloc() o calloc(), è possibile riallocare la memoria tramite la funzione realloc(). In breve, cambia la dimensione della memoria.
Vediamo la sintassi della funzione realloc().
ptr=realloc(ptr, new-size)
funzione free() in C
La memoria occupata dalle funzioni malloc() o calloc() deve essere liberata chiamando la funzione free(). Altrimenti, consumerà memoria fino all'uscita dal programma.
Vediamo la sintassi della funzione free().
free(ptr)