Différence entre malloc() et calloc()

Principales différences entre malloc() et calloc()

  • La fonction malloc() renvoie uniquement l'adresse de départ et ne la rend pas nulle, en revanche, la fonction calloc() renvoie l'adresse de départ et la rend nulle.
  • Dans la fonction malloc, le nombre d'arguments est 1, tandis que dans la fonction calloc, le nombre d'arguments est 2.
  • L'efficacité temporelle de malloc() est supérieure à celle de calloc(), alors que malloc() n'est pas sécurisée par rapport à calloc()
  • malloc n'initialise pas la mémoire, alors que calloc effectue l'initialisation de la mémoire.
malloc() contre calloc()
malloc() contre calloc()

Qu’est-ce que l’allocation dynamique de mémoire ?

Allocation de mémoire dynamique est un processus d'allocation de mémoire au moment de l'exécution. Il existe quatre routines de bibliothèque, calloc(), free(), réalloc(), et malloc() qui peuvent être utilisés pour allouer de la mémoire et la libérer pendant l'exécution du programme. Ces routines sont définies dans le fichier d'en-tête appelé stdlib.h.

Qu'est-ce que malloc() ?

C'est une fonction qui permet d'allouer dynamiquement un bloc de mémoire. Il réserve un espace mémoire d'une taille spécifiée et renvoie le pointeur nul pointant vers l'emplacement mémoire.

Le pointeur renvoyé est généralement de type void. Cela signifie que nous pouvons attribuer une fonction malloc à n’importe quel pointeur. La forme complète de malloc est l'allocation de mémoire.

Qu'est-ce que calloc() ?

Fonction Calloc() est utilisé pour allouer plusieurs blocs de mémoire. Il s'agit d'une fonction d'allocation dynamique de mémoire qui est utilisée pour allouer de la mémoire à des structures de données complexes telles que des tableaux et des structures. Si cette fonction ne parvient pas à allouer suffisamment d'espace comme spécifié, elle renvoie un pointeur nul. La forme complète de la fonction calloc est l’allocation contiguë.

Différence entre malloc() et calloc()

Voici les différences importantes entre malloc() et calloc() :

malloc () calloc()
La fonction Malloc() créera un seul bloc de mémoire de taille spécifiée par l'utilisateur. La fonction Calloc() peut attribuer plusieurs blocs de mémoire à une variable.
La fonction Malloc contient une valeur inutile. Le bloc mémoire alloué par une fonction calloc est toujours initialisé à zéro.
Le nombre d'arguments est 1. Le nombre d'arguments est de 2.
Calloc est plus lent que malloc. Malloc est plus rapide que calloc.
Ce n’est pas sécurisé par rapport à calloc. Son utilisation est sécurisée par rapport à malloc.
L'efficacité du temps est supérieure à celle de calloc(). L'efficacité du temps est inférieure à celle de malloc().
La fonction Malloc() renvoie uniquement l'adresse de départ et ne la rend pas nulle. Avant d'attribuer l'adresse, la fonction Calloc() renvoie l'adresse de départ et la rend nulle.
Il n'effectue pas d'initialisation de la mémoire. Il effectue l'initialisation de la mémoire.

Syntaxe de malloc()

Voici une syntaxe de malloc()

ptr = (cast_type *) malloc (byte_size);

Dans la syntaxe ci-dessus, ptr est un pointeur de cast_type. La fonction malloc renvoie un pointeur vers la mémoire allouée de byte_size.

Example: ptr = (int *) malloc (50)

Lorsque cette instruction est exécutée avec succès, un espace mémoire de 50 octets est réservé. L'adresse du premier octet d'espace réservé est affectée au pointeur « ptr » de type int.

Syntaxe de calloc()

Voici une syntaxe de malloc()

ptr = (cast_type *) calloc (n, size);

La syntaxe ci-dessus est utilisée pour allouer n blocs mémoire de même taille. Une fois l'espace mémoire alloué, tous les octets sont initialisés à zéro. Le pointeur, qui se trouve actuellement sur le premier octet de l'espace mémoire alloué, est renvoyé.

Exemple de malloc() en C

Dans le code ci-dessous, sizeof(*ptr) est utilisé pour allouer un bloc mémoire de 15 entiers. Dans l'instruction printf, nous trouvons la valeur du 6ème entier.

#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));
    }
}

Sortie :

La valeur du 6ème entier est 480

Exemple de calloc() en C

Le programme en langage C ci-dessous calcule la somme des dix premiers termes. Si la valeur du pointeur est nulle, alors l'espace mémoire ne sera pas alloué.

La boucle For est utilisée pour parcourir la valeur d'une variable «i» et imprimer la somme. Enfin, la fonction free permet de libérer le pointeur.

#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;
    }

Sortie :

Construire et calculer la somme séquentielle des 10 premiers termes n Somme = 45

Pourquoi utiliser malloc() ?

Voici les raisons d'utiliser malloc()

  • Vous devez utiliser malloc() lorsque vous devez allouer de la mémoire au moment de l'exécution.
  • Vous devez utiliser malloc lorsque vous devez allouer des objets qui doivent exister au-delà de l'exécution du bloc de mémoire actuel.
  • Optez pour malloc() si vous devez allouer une mémoire supérieure à la taille de cette pile.
  • Il renvoie le pointeur vers le premier octet de l'espace alloué.
  • Il permet aux développeurs d’allouer la mémoire selon leurs besoins, dans la quantité exacte.
  • Cette fonction alloue une taille de bloc mémoire d'octets à partir du tas.

Pourquoi utiliser calloc() ?

Voici les raisons d'utiliser calloc()

  • Lorsque vous devez remettre la mémoire allouée à zéro.
  • Vous pouvez utiliser calloc qui renvoie un pointeur pour accéder au tas de mémoire.
  • Utilisé lorsque vous devez initialiser les éléments à zéro pour renvoyer un pointeur vers la mémoire.
  • Pour éviter les débordements possibles avec malloc()
  • Utilisez calloc() pour demander une page dont on sait qu'elle est déjà mise à zéro.