malloc () vs calloc ():différences clés expliquées avec des exemples
Avant d'apprendre la différence entre malloc et calloc, apprenons-
Qu'est-ce que l'allocation de mémoire dynamique ?
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 un espace mémoire de taille spécifiée et renvoie le pointeur nul pointant vers l'emplacement de la 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 didacticiel, vous apprendrez :
- Qu'est-ce que l'allocation de mémoire dynamique ?
- 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 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ë.
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 de mémoire actuel.
- Optez pour malloc() si vous devez 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 la mémoire dont ils ont besoin avec 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 définir la mémoire allouée sur 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 le débordement possible avec malloc()
- Utilisez calloc() pour demander une page dont on sait qu'elle est déjà mise à 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<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 itérer la valeur d'une variable "i" et imprimer la somme. Enfin, la fonction free est utilisée pour 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 suite somme des 10 premiers termes n Somme =45
Différence entre calloc() et malloc()
Voici 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 pour une variable. La fonction Malloc contient une valeur parasite. Le bloc de mémoire alloué par une fonction calloc est toujours initialisé à zéro. Le nombre d'arguments est 1. Le nombre d'arguments est 2. Calloc est plus lent que malloc. Malloc est plus rapide que calloc. (). L'efficacité temporelle est inférieure à 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. Elle n'effectue pas d'initialisation de la mémoire. Il effectue l'initialisation de la mémoire.DIFFÉRENCES CLÉS :
- la fonction malloc() renvoie uniquement l'adresse de départ et ne la met pas à zéro, d'autre part, 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 à calloc() alors que malloc() n'est pas sécurisé par rapport à calloc()
- malloc n'initialise pas la mémoire alors que calloc effectue l'initialisation de la mémoire.
Langue C
- Expressions, instructions et blocs C# (avec exemples)
- Boucle do…while C++ avec exemples
- Pointeurs C++ avec exemples
- Type de données Char C++ avec exemples
- Surcharge d'opérateur C++ avec des exemples
- Fonctions C++ avec exemples de programmes
- Tutoriel sur les collections C # avec des exemples
- Différence entre while et do-while :expliquée avec des exemples
- Fonction calloc() dans la bibliothèque C avec l'EXEMPLE de programme