La differenza fondamentale tra malloc e la funzione calloc è che calloc() ha bisogno di due argomenti invece di un argomento richiesto da malloc(). Sia malloc () che calloc () sono le funzioni che il linguaggio di programmazione C fornisce per l’allocazione dinamica della memoria e la de-allocazione in fase di esecuzione.
Prima di comprendere le funzioni malloc() e calloc() prima di capire il significato dell’allocazione dinamica della memoria. L’allocazione della memoria è la procedura di assegnazione della memoria del computer per l’esecuzione di programmi e processi. Utilizziamo tecniche di allocazione dinamica quando non è noto prima quanto spazio di memoria è necessario per il programma e il processo.
L’allocazione dinamica della memoria si verifica a causa dei problemi associati all’allocazione statica della memoria, ad esempio se vengono memorizzati meno elementi, il resto della memoria viene inutilmente sprecato. Pertanto, supera i problemi di allocazione statica della memoria in cui la memoria viene allocata solo quando è richiesta.
Contenuto: malloc() Vs calloc()
- tabella di Confronto
- Definizione
- Differenze Chiave
- Conclusione
tabella di Confronto
Base di confronto | malloc() | calloc() |
---|---|---|
No di blocchi | Assegna unico blocco di richieste di memoria. | Assegna più blocchi della memoria richiesta. |
Sintassi | void *malloc(size_t size); | void * calloc (size_t num, size_t size); |
Inizializzazione | malloc() non cancella e inizializza la memoria allocata. | La memoria allocata viene inizializzata a zero usando calloc (). |
Modo di allocazione | la funzione malloc() alloca la memoria di size ‘size’ dall’heap. | calloc() funzione alloca memoria la cui dimensione è uguale a num * size. |
Velocità | Veloce | Relativamente lento. |
Definizione di malloc()
La funzione malloc assegna un blocco di memoria in byte. L’utente dovrebbe fornire esplicitamente la dimensione del blocco, che richiede per l’uso.
Attraverso la funzione malloc il programma richiede RAM del sistema per l’allocazione della memoria, se la richiesta viene concessa (cioè, la funzione malloc dice successo nell’allocazione della memoria), restituisce un puntatore al primo blocco di memoria. Restituisce il tipo di puntatore vuoto, il che significa che è possibile assegnare qualsiasi tipo di puntatore.
Sebbene, restituisce un NULL, se le funzioni malloc non è in grado di allocare la quantità di memoria richiesta. La funzione malloc è accessibile in TURBO C, nel file di intestazionealloc.h
ostdlib.h
, e su UNIX sarà disponibile nel file di intestazione<malloc.h>
.
la SINTASSI
La sintassi di questa funzione è il seguente:
malloc(number of elements * size of each element);
per esempio,int *ptr;
ptr=malloc(10*sizeof (int))
in Cui la dimensione rappresenta la dimensione di memoria in byte(cioè, il numero di posizioni di memoria contigue da allocare).
Ma come accennato prima che la funzione malloc restituisce un puntatore vuoto, di conseguenza è richiesto un operatore cast per modificare il tipo di puntatore restituito in base alle nostre esigenze, la dichiarazione sopra potrebbe essere presentata nel seguente modulo:
ptr_var=(type_cast* ) malloc (size)
Dove ptr_var
è il nome del puntatore che conserva l’indirizzo iniziale del blocco di memoria allocata, type_cast
è il tipo di dati in cui il puntatore restituito (o di tipo void) è quello di essere trasformato, e la dimensione descrive la dimensione del blocco di memoria allocata in byte.
Ad esempio:int *ptr;
ptr=(int*) malloc (10 * size of (int));
La memoria allocata dalla funzione malloc contiene il valore garbage.
Si noti che per verificare che se la richiesta corrispondente viene generata da malloc allocare la memoria concessa dalla RAM di sistema, o rifiutato (nel caso in cui lo spazio richiesto non è disponibile). Possiamo utilizzare la proprietà in cui la quantità necessaria di memoria non viene assegnata la funzione malloc restituisce un NULL.
Definizione di calloc ()
La funzione calloc funziona esattamente come la funzione malloc escludendo il fatto che richiede due argomenti come nel caso di malloc() è necessario un solo argomento.
Per esempio:int*ptr;
ptr = (int*)calloc(10,2);
Qui 2 specifica la dimensione del tipo di dati in un byte per il quale vogliamo che venga effettuata l’allocazione, che in questo caso è 2 per gli interi. E 10 indica il numero di elementi per i quali deve essere effettuata l’allocazione.
Ricorda che l’argomento passato alla funzione malloc era (n*10), è un singolo argomento da non confondere perché più argomenti sono sempre separati da virgole. L’argomento (n * 10) non ha virgole intermedie. Quindi è un singolo argomento, anche se non semplice ma un’espressione.
Tornando alla suddetta dichiarazione, a seguito dell’esecuzione dell’istruzione di cui sopra un blocco di memoria di 20 byte allocato per il programma richiedente e l’indirizzo del primo blocco viene assegnato al programma richiedente e l’indirizzo del primo blocco viene assegnato al puntatore ptr.
Memoria allocata dalla funzione calloc tenere tutti gli zeri. La funzione calloc è ottenibile anche nel file di intestazione <stdlib.h>
o <alloc.h>
in TURBO C.
Differenze chiave tra malloc e calloc
Le differenze principali tra le funzioni malloc e calloc sono:
- Un singolo blocco di memoria richiesta viene assegnato in malloc mentre più blocchi di memoria richiesta vengono allocati da calloc.
- La funzione malloc non cancella e inizializza la memoria allocata. Contiene valore spazzatura e l’elemento della memoria allocata non può essere modificato. Al contrario, calloc inizializza la memoria allocata a zero.
- malloc è più veloce di calloc a causa del requisito di ulteriori passaggi di inizializzazione nel calloc, ma la differenza è trascurabile.
- Un’altra differenza tra questi due è che calloc è un malloc+memset, memset alloca le pagine fisiche in memoria mentre malloc assegna solo la memoria dall’heap nell’indirizzo virtuale.
Conclusione
Entrambe le funzioni malloc e calloc sono utilizzate per l’allocazione della memoria e hanno il loro certo vantaggio, e svantaggio come malloc è veloce rispetto a calloc. Inoltre, malloc più facile da usare in quanto richiede solo un argomento perché calloc alloca memoria e inizializza l’area di memoria con ZERO. Ma preferiresti usare calloc quando l’inizializzazione delle variabili è più importante per te.