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.
malloc() vs calloc()
malloc() vs calloc()

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.