Prima di imparare la differenza tra malloc e calloc impariamo-
Cos'è l'allocazione dinamica della memoria?
L'allocazione dinamica della memoria è un processo di allocazione della memoria in fase di esecuzione. Ci sono quattro routine di libreria, calloc (), free (), realloc () e malloc () che possono essere usate per allocare memoria e liberarla durante l'esecuzione del programma. Queste routine sono definite nel file di intestazione denominato stdlib.h.
Cos'è malloc ()?
È una funzione che viene utilizzata per allocare dinamicamente un blocco di memoria. Riserva lo spazio di memoria della dimensione specificata e restituisce il puntatore nullo che punta alla posizione di memoria.
Il puntatore restituito è generalmente di tipo void. Significa che possiamo assegnare la funzione malloc a qualsiasi puntatore. La forma completa di malloc è l'allocazione della memoria.
In questo tutorial imparerai:
- Cos'è l'allocazione dinamica della memoria?
- Cos'è malloc ()?
- Cos'è calloc ()?
- Perché usare malloc ()?
- Perché usare calloc ()?
- Sintassi di malloc ()
- Sintassi di calloc ()
- Esempio di malloc () in C
- Esempio di calloc () in C
- Differenza tra calloc () e malloc ()
Cos'è calloc ()?
La funzione Calloc () viene utilizzata per allocare più blocchi di memoria. È una funzione di allocazione dinamica della memoria che viene utilizzata per allocare la memoria a strutture di dati complesse come array e strutture. Se questa funzione non riesce ad allocare spazio sufficiente come specificato, restituisce un puntatore nullo. La forma completa della funzione calloc è l'allocazione contigua.
Perché usare malloc ()?
Ecco i motivi per utilizzare malloc ()
- Dovresti usare malloc () quando devi allocare memoria in fase di esecuzione.
- Dovresti usare malloc quando devi allocare oggetti che devono esistere oltre l'esecuzione del blocco di memoria corrente.
- Scegli malloc () se hai bisogno di allocare memoria maggiore della dimensione di quello stack.
- Restituisce il puntatore al primo byte dello spazio allocato.
- Consente agli sviluppatori di allocare la memoria necessaria nella quantità esatta.
- Questa funzione alloca una dimensione del blocco di memoria di byte dall'heap.
Perché usare calloc ()?
Ecco i motivi per utilizzare calloc ()
- Quando devi impostare la memoria allocata su zero.
- È possibile utilizzare calloc che restituisce un puntatore per ottenere l'accesso all'heap di memoria.
- Utilizzato quando è necessario inizializzare gli elementi su zero per restituire un puntatore alla memoria.
- Per prevenire l'overflow che è possibile con malloc ()
- Usa calloc () per richiedere una pagina nota per essere già azzerata.
Sintassi di malloc ()
Ecco una sintassi di malloc ()
ptr = (cast_type *) malloc (byte_size);
Nella sintassi precedente, ptr è un puntatore di cast_type. La funzione malloc restituisce un puntatore alla memoria allocata di byte_size.
Example: ptr = (int *) malloc (50)
Quando questa istruzione viene eseguita correttamente, viene riservato uno spazio di memoria di 50 byte. L'indirizzo del primo byte di spazio riservato è assegnato al puntatore "ptr" di tipo int.
Sintassi di calloc ()
Ecco una sintassi di malloc ()
ptr = (cast_type *) calloc (n, size);
La sintassi precedente viene utilizzata per allocare n blocchi di memoria della stessa dimensione. Dopo l'allocazione dello spazio di memoria, tutti i byte vengono inizializzati su zero. Viene restituito il puntatore, che si trova attualmente al primo byte dello spazio di memoria allocato.
Esempio di malloc () in C
Nel codice seguente, sizeof (* ptr) viene utilizzato per allocare un blocco di memoria di 15 numeri interi. Nell'istruzione printf troviamo il valore del sesto numero intero.
#include#include int main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}
Produzione:
Il valore del sesto numero intero è 480
Esempio di calloc () in C
Il seguente programma in linguaggio C calcola la somma dei primi dieci termini. Se il valore del puntatore è nullo, lo spazio di memoria non verrà allocato.
Il ciclo For viene utilizzato per iterare il valore di una variabile "i" e stampare la somma. Infine, la funzione free viene utilizzata per liberare il puntatore.
#include#include int main() {int i, * ptr, sum = 0;ptr = calloc(10, sizeof(int));if (ptr == NULL) {printf("Error! memory not allocated.");exit(0);}printf("Building and calculating the sequence sum of the first 10 terms \n");for (i = 0; i < 10; ++i) { * (ptr + i) = i;sum += * (ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;}
Produzione:
Costruire e calcolare la somma sequenziale dei primi 10 termini n Somma = 45
Differenza tra calloc () e malloc ()
Herer sono importanti differenze tra malloc () e calloc ():
malloc () | calloc () |
La funzione Malloc () creerà un singolo blocco di memoria della dimensione specificata dall'utente. | La funzione Calloc () può assegnare più blocchi di memoria per una variabile. |
La funzione Malloc contiene un valore di spazzatura. | Il blocco di memoria allocato da una funzione calloc è sempre inizializzato a zero. |
Il numero di argomenti è 2. | Il numero di argomenti è 1. |
Calloc è più lento di malloc. | Malloc è più veloce di calloc. |
Non è sicuro rispetto a calloc. | È sicuro da usare rispetto a malloc. |
L'efficienza temporale è maggiore di calloc (). | L'efficienza temporale è inferiore a malloc (). |
La funzione Malloc () restituisce solo l'indirizzo iniziale e non lo zero. | Prima di allocare l'indirizzo, la funzione Calloc () restituisce l'indirizzo iniziale e lo rende zero. |
Non esegue inizializzazioni di memoria. | Esegue l'inizializzazione della memoria. |
PRINCIPALI DIFFERENZE:
- La funzione malloc () restituisce solo l'indirizzo iniziale e non lo rende zero, d'altra parte, la funzione calloc () restituisce l'indirizzo iniziale e lo rende zero.
- Nella funzione malloc, il numero di argomenti è 2 mentre nella funzione calloc, il numero di argomenti è 1.
- L'efficienza temporale di malloc () è maggiore di calloc () mentre malloc () non è sicura rispetto a calloc ()
- malloc non inizializza la memoria mentre calloc esegue l'inizializzazione della memoria.