Differenza tra malloc() e calloc()
Differenze chiave tra malloc() e calloc()
- 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 è 1, mentre nella funzione calloc il numero di argomenti è 2.
- L'efficienza temporale di malloc() è superiore a calloc(), mentre malloc() non è sicura rispetto a calloc()
- malloc non inizializza la memoria, mentre calloc esegue l'inizializzazione della memoria.

Cos'è l'allocazione dinamica della memoria?
Allocazione dinamica della memoria è un processo di allocazione della memoria in fase di esecuzione. Ci sono quattro routine di libreria, calloc(), free(), riallocare()e malloc() che può essere utilizzato per allocare memoria e liberarla durante l'esecuzione del programma. Queste routine sono definite nel file di intestazione chiamato 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 è solitamente di tipo void. Significa che possiamo assegnare la funzione malloc a qualsiasi puntatore. La forma completa di malloc è l'allocazione della memoria.
Cos'è calloc()?
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 dati complesse come array e strutture. Se questa funzione non riesce ad allocare abbastanza spazio come specificato, restituisce un puntatore nullo. La forma completa della funzione calloc è allocazione contigua.
Differenza tra malloc() e calloc()
Ecco le differenze importanti 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 spazzatura. | Il blocco di memoria allocato da una funzione calloc viene sempre inizializzato a zero. |
| Il numero di argomenti è 1. | Il numero di argomenti è 2. |
| Calloc è più lento di malloc. | Malloc è più veloce di calloc. |
| Non è sicuro rispetto a calloc. | È sicuro da usare rispetto a malloc. |
| L'efficienza temporale è superiore a calloc(). | L'efficienza temporale è inferiore rispetto a malloc(). |
| La funzione Malloc() restituisce solo l'indirizzo iniziale e non lo rende zero. | Prima di allocare l'indirizzo, la funzione Calloc() restituisce l'indirizzo iniziale e lo rende zero. |
| Non esegue l'inizializzazione della memoria. | Esegue l'inizializzazione della memoria. |
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 con successo, 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 che lo spazio di memoria è stato allocato, tutti i byte vengono inizializzati a zero. Viene restituito il puntatore che attualmente si trova sul 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<stdlib.h>
#include<stdio.h>
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 intero è 6
Esempio di calloc() in C
Il programma in linguaggio C riportato di seguito 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 ripetere il valore di una variabile "i" e stampare la somma. Infine, la funzione free viene utilizzata per liberare il puntatore.
#include <stdio.h>
#include <stdlib.h>
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
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 devi allocare memoria maggiore della dimensione di quello stack.
- Restituisce il puntatore al primo byte di spazio allocato.
- Consente agli sviluppatori di allocare la memoria necessaria nella quantità esatta.
- Questa funzione alloca una dimensione di blocco di memoria di byte dall'heap.
Perché usare calloc() ?
Ecco i motivi per utilizzare calloc()
- Quando è necessario impostare la memoria allocata su zero.
- È possibile utilizzare calloc che restituisce un puntatore per accedere all'heap di memoria.
- Utilizzato quando è necessario inizializzare gli elementi a zero per restituire un puntatore alla memoria.
- Per prevenire l'overflow è possibile con malloc()
- Utilizzare calloc() per richiedere una pagina che è già azzerata.
