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.