La différence fondamentale entre malloc et la fonction calloc est que calloc() a besoin de deux arguments au lieu d’un seul argument requis par malloc(). malloc() et calloc() sont les fonctions fournies par le langage de programmation C pour l’allocation et la désallocation dynamiques de la mémoire au moment de l’exécution.
Avant de comprendre les fonctions malloc() et calloc(), comprenons d’abord la signification de l’allocation de mémoire dynamique. L’allocation de mémoire est la procédure d’attribution de la mémoire de l’ordinateur pour l’exécution de programmes et de processus. Nous utilisons des techniques d’allocation dynamique lorsqu’on ne sait pas au préalable combien d’espace mémoire est nécessaire pour le programme et le processus.
L’allocation de mémoire dynamique est due aux problèmes liés à l’allocation de mémoire statique, tels que si moins d’éléments sont stockés, le reste de la mémoire est inutilement gaspillé. Par conséquent, il surmonte les problèmes d’allocation de mémoire statique où la mémoire n’est allouée que lorsque cela est nécessaire.
Contenu: malloc() Vs calloc()
- Tableau de comparaison
- Définition
- Différences clés
- Conclusion
Tableau de comparaison
Base de comparaison | malloc() | calloc() |
---|---|---|
Aucun bloc | Attribue un seul bloc de mémoire demandée. | Affecte plusieurs blocs de la mémoire demandée. |
Syntaxe | void*malloc(size_t size); | void*calloc(size_t num, size_t size); |
Initialisation | malloc() n’efface pas et n’initialise pas la mémoire allouée. | La mémoire allouée est initialisée à zéro à l’aide de calloc(). |
Mode d’allocation | la fonction malloc() alloue la mémoire de la taille ‘size’ du tas. | la fonction calloc() alloue de la mémoire dont la taille est égale à la taille num*. |
Vitesse | Rapide | Relativement lent. |
Définition de malloc()
La fonction malloc attribue un bloc de mémoire en octets. L’utilisateur doit donner explicitement la taille du bloc, qu’il nécessite pour l’utilisation.
Par le biais de la fonction malloc, le programme demande de la RAM du système pour l’allocation de la mémoire, si la requête est concédée (c’est-à-dire que la fonction malloc dit avoir réussi à allouer de la mémoire), il renvoie un pointeur vers le premier bloc de mémoire. Il renvoie un type de pointeur vide, ce qui signifie que tout type de pointeur peut être attribué.
Bien que, il renvoie un NULL, si les fonctions malloc ne sont pas en mesure d’allouer la quantité de mémoire requise. La fonction malloc est accessible dans TURBO C, le fichier d’en-tête alloc.h
ou stdlib.h
, et sous UNIX, elle sera disponible dans le fichier d’en-tête <malloc.h>
.
SYNTAXE
La syntaxe de cette fonction est la suivante :
malloc(number of elements * size of each element);
par exemple, int *ptr;
ptr=malloc(10*sizeof (int))
Où la taille représente la taille de mémoire requise en octets (i.e., le nombre d’emplacements de mémoire contigus à allouer).
Mais comme mentionné précédemment, la fonction malloc renvoie un pointeur vide, par conséquent, un opérateur cast est nécessaire pour changer le type de pointeur renvoyé en fonction de nos besoins, la déclaration ci-dessus peut être présentée sous la forme suivante:
ptr_var=(type_cast* ) malloc (size)
Où ptr_var
est le nom du pointeur qui conserve l’adresse de départ du bloc de mémoire alloué, type_cast
est le type de données dans lequel le pointeur retourné (ou le type void) doit être transformé, et size décrit la taille de la mémoire allouée bloc en octets.
Par exemple: int *ptr;
ptr=(int*) malloc (10 * size of (int));
La mémoire allouée par la fonction malloc contient une valeur garbage.
Notez que pour vérifier que si la requête correspondante est générée par malloc pour allouer la mémoire accordée par la RAM système, ou rejetée (au cas où l’espace requis ne serait pas disponible). Nous pouvons utiliser la propriété dans laquelle la quantité de mémoire nécessaire n’est pas affectée, la fonction malloc renvoie un NULL.
Définition de calloc()
La fonction calloc fonctionne exactement de la même manière que la fonction malloc en excluant le fait qu’elle nécessite deux arguments car dans le cas de malloc(), un seul argument est nécessaire.
Par exemple:
int*ptr;
ptr = (int*)calloc(10,2);
Ici 2 spécifie la taille du type de données dans un octet pour lequel nous voulons que l’allocation soit faite, ce qui est ce cas est 2 pour les entiers. Et 10 signifient le nombre d’éléments pour lesquels une allocation doit être effectuée.
Rappelez-vous que l’argument passé à la fonction malloc était (n * 10), c’est un seul argument à ne pas confondre car plusieurs arguments sont toujours séparés par des virgules. L’argument (n*10) n’a pas de virgules entre les deux. C’est donc un argument unique, mais pas simple mais une expression.
Pour revenir à la déclaration ci-dessus, suite à l’exécution de l’instruction ci-dessus, un bloc mémoire de 20 octets est alloué au programme demandeur et l’adresse du premier bloc est affectée au programme demandeur, et l’adresse du premier bloc est affectée au pointeur ptr.
La mémoire allouée par la fonction calloc contient tous les zéros. La fonction calloc peut également être obtenue dans le fichier d’en-tête <stdlib.h>
ou <alloc.h>
dans TURBO C.
Différences clés Entre malloc et calloc
Les principales différences entre les fonctions malloc et calloc sont les suivantes:
- Un seul bloc de mémoire demandée est attribué dans malloc tandis que plusieurs blocs de mémoire demandée sont alloués par calloc.
- La fonction malloc ne s’efface pas et initialise la mémoire allouée. Il contient la valeur de la poubelle et l’élément de la mémoire allouée ne peut pas être modifié. En revanche, calloc initialise la mémoire allouée à zéro.
- malloc est plus rapide que calloc en raison de la nécessité d’étapes supplémentaires d’initialisation dans le calloc mais la différence est négligeable.
- Une autre différence entre ces deux est que calloc est un memset malloc +, memset alloue les pages physiques en mémoire alors que malloc n’affecte que la mémoire du tas dans l’adresse virtuelle.
Conclusion
Les fonctions malloc et calloc sont utilisées pour l’allocation de la mémoire et ont leur avantage certain, et un inconvénient comme malloc est rapide par rapport à calloc. De plus, malloc est plus facile à utiliser car il ne prend qu’un seul argument car calloc alloue de la mémoire et initialise la zone mémoire avec ZÉRO. Mais vous préféreriez utiliser calloc lorsque l’initialisation des variables est plus importante pour vous.