Malloc () vs calloc (): differenze chiave spiegate con esempi

Sommario:

Anonim

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#includeint 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.