Malloc () vs calloc (): principales différences expliquées avec des exemples

Table des matières:

Anonim

Avant d'apprendre la différence entre malloc et calloc, apprenons-

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

L'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 (), realloc () et malloc () qui peuvent être utilisées 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 l'espace mémoire de la 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.

Dans ce tutoriel, vous apprendrez:

  • Qu'est-ce que l'allocation dynamique de mémoire?
  • Qu'est-ce que malloc ()?
  • Qu'est-ce que Calloc ()?
  • Pourquoi utiliser malloc ()?
  • Pourquoi utiliser calloc ()?
  • Syntaxe de malloc ()
  • Syntaxe de calloc ()
  • Exemple de malloc () en C
  • Exemple de calloc () en C
  • Différence entre calloc () et malloc ()

Qu'est-ce que Calloc ()?

La fonction Calloc () est utilisée pour allouer plusieurs blocs de mémoire. Il s'agit d'une fonction d'allocation de mémoire dynamique qui est utilisée pour allouer 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ë.

Pourquoi utiliser malloc ()?

Voici les raisons d'utiliser malloc ()

  • Vous devez utiliser malloc () lorsque vous devez allouer de la mémoire lors 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 mémoire courant.
  • Optez pour malloc () si vous avez besoin d'allouer de la mémoire supérieure à la taille de cette pile.
  • Il renvoie le pointeur sur le premier octet de l'espace alloué.
  • Il permet aux développeurs d'allouer de la mémoire selon les besoins dans la quantité exacte.
  • Cette fonction alloue une taille de bloc de mémoire d'octets à partir du tas.

Pourquoi utiliser calloc ()?

Voici les raisons d'utiliser calloc ()

  • Lorsque vous devez mettre 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 tout débordement possible avec malloc ()
  • Utilisez calloc () pour demander une page dont on sait qu'elle est déjà remise à zéro.

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 de l'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 permet d'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#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));}}

Production:

La valeur du 6ème entier est 480

Exemple de calloc () en C

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

La boucle For est utilisée pour itérer la valeur d'une variable "i" et afficher la somme. Enfin, la fonction libre est utilisée pour libérer le pointeur.

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

Production:

Construction et calcul de la somme séquentielle des 10 premiers termes n Somme = 45

Différence entre calloc () et malloc ()

Herer sont une différence importante entre malloc () et calloc ():

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

DIFFÉRENCES CLÉS:

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