Différence entre Malloc et Realloc dans la programmation C

Différence entre Malloc et Realloc dans la programmation C
Le malloc () et le realloc (); Les deux fonctions sont utilisées pour l'allocation de mémoire dynamique et dans cet article, nous discuterons de la comparaison des deux; Realloc () et malloc () fonctions en détail. Mais avant de comprendre ces fonctions, discutons la différence entre la mémoire statique et dynamique dans la programmation C.

En programmation C, lorsque nous exécutons un programme, il occupe une certaine mémoire sur le système. Si nous utilisons la mémoire statique, nous devons attribuer un bloc de mémoire fixe du système, puis après l'exécution du programme, deux scénarios peuvent se produire; Le programme aura besoin d'une taille de bloc plus grande que la taille déclarée, soit il aura besoin du bloc de mémoire plus petit. Si le bloc de mémoire devient moindre pour le programme exécuté, les résultats ne seront pas précis et si la taille du bloc est plus grande pour le programme exécuté, la mémoire libre restante du bloc est sans usage.

Pour éviter cela, il est préféré utiliser la mémoire dynamique dans la programmation C qui a différents types de fonctions.

Qu'est-ce qu'une fonction malloc () dans la programmation C

En programmation C, si nous utilisons la mémoire statique, nous ne pouvons pas modifier la taille de la mémoire pendant l'exécution du programme. C'est une pratique recommandée d'utiliser la mémoire dynamique dans la programmation C afin que la taille de la mémoire puisse être modifiée lors de l'exécution du programme.

Pour l'utilisation de la mémoire dynamique, nous devons inclure un fichier d'en-tête «STDLIB.h ”, qui comprend toutes les fonctions de la mémoire dynamique. Le malloc () est également membre de STDLIB.h bibliothèque et est utilisée pour attribuer de la mémoire au programme exécuté. Lorsqu'une fonction malloc () est appelée dans un programme, il envoie une demande au tas du système, qui attribue le bloc de mémoire demandé à la fonction malloc () ou renvoie une valeur nulle s'il n'y a pas d'espace suffisant sur le tas.

Le malloc () demande le bloc de mémoire en fonction de la nécessité du programme exécuté et lorsque le programme est exécuté avec succès, nous pouvons retourner le bloc de mémoire au tas en utilisant la fonction libre (), afin qu'il puisse être utilisé pour l'exécution des autres instructions.

La syntaxe générale de la fonction malloc () est:

PTR_NAME = (Cast-Type *) Malloc (taille);

L'explication de la syntaxe ci-dessus est simple:

  • Nous pouvons utiliser n'importe quel nom pour le pointeur (le pointeur est utilisé pour stocker les adresses)
  • Ensuite, nous devons déclarer le type de données ou le type de distribution pour le pointeur comme INT et CHAR
  • Et enfin en utilisant la fonction malloc () et à l'intérieur de la fonction, nous devons mentionner la taille de la mémoire nécessaire

Pour une meilleure compréhension, nous considérerons un exemple, créer un fichier avec le nom de mal_txt.c et tapez le script suivant:

#inclure
#inclure
int main()
int a = 4, i, * ptr, s = 0;
ptr = (int *) malloc (a * sizeof (int));
if (ptr == null)
printf ("\ nerror! Mémoire non allouée.");
sortie (0);

printf ("\ nenter Elements of Array:");
pour (i = 0; i< a; ++i)
scanf ("% d", ptr + i);
S + = * (PTR + I);

printf ("\ nsum:% d", s);
printf («\ n»);
retour 0;

Pour compiler le mal_txt.Fichier C, nous utilisons le compilateur GCC:

$ gcc mal_txt.c -o mal_txt

Une fois le fichier compilé avec succès sans aucune erreur, exécutez le code à l'aide de la commande:

$ ./ Mal_txt

Dans le code ci-dessus, nous créons le tableau et imprimons la somme des éléments du tableau. Une explication détaillée du programme ci-dessus est:

  • Nous avons inclus les deux bibliothèques; stdlib.H pour l'utilisation des fonctions de mémoire dynamique et STdio.H pour les fonctions d'entrée et de sortie
  • Nous avons déclaré quatre variables A, S, I et * P où «*» est utilisé avec «P» car c'est un pointeur et stocker l'emplacement au lieu de variables
  • Nous avons utilisé la fonction malloc () et utilisé la taille d'une variable «A», ce qui signifie qu'il demandera la mémoire du tas en fonction de la taille de «A» et le pointeur «P» ira au début de la mémoire alloué
  • Ensuite, nous avons utilisé «IF instruction», si le tas n'a pas eu de mémoire suffisante, il renvoie la valeur nulle, dans ce cas, affichez simplement «l'erreur! Mémoire non allouée.”Utilisation de la fonction printf ()
  • Si la mémoire est attribuée, alors à l'aide de la fonction Scanf (), il prendra quatre éléments de l'utilisateur, calculez sa somme et enregistrera en «S»
  • Enfin, affichera la valeur de «S» qui est la somme de tous les éléments du tableau

Qu'est-ce qu'une fonction realloc () dans la programmation C

Une autre fonction de la mémoire dynamique est la fonction realloc (), il est utilisé pour modifier le bloc de mémoire attribué à la fonction malloc (). La fonction malloc () comme indiqué ci-dessus demande un bloc de mémoire du tas, mais pour modifier la taille du bloc de mémoire, nous avons donc utilisé la fonction realloc () au lieu de supprimer le bloc de mémoire entier et de redémarrer manuellement le nouveau bloc de mémoire.

La fonction realloc () est la forme courte de la «réallocation de la mémoire» et il est utilisé pour redimensionner la taille du bloc de mémoire attribuée par le tas à malloc () ou calloc (). Il ne perturbe pas le contenu d'origine du bloc de mémoire et demande le nouveau bloc de mémoire du tas et copie toutes les données de l'ancien bloc de mémoire vers le nouveau bloc de mémoire sans en déranger aucun contenu.

La syntaxe générale de l'utilisation de la fonction realloc () est:

$ ptr = realloc (ptr, newsize);

L'explication de la syntaxe ci-dessus est:

  • Utilisez la variable du pointeur qui est utilisée avec la fonction malloc ()
  • Utilisez la fonction realloc () avec les paramètres; Nom du pointeur et nouvelle taille que vous souhaitez l'attribuer

Encore une fois, nous créerons un fichier, Real_file.c, et écrivez le code pour une meilleure compréhension de l'utilisation de la fonction realloc ():

#inclure
#inclure
int main()
int * ptr;
PTR = Malloc (200);
if (ptr == null)
printf ("La mémoire n'est pas allouée.");
sortie (0);

ptr = realloc (ptr, 400);
if (ptr!= Null)
printf ("La mémoire a réussi à allouer \ n");
retour 0;

Compilez maintenant le real_file.C Utilisation du compilateur GCC:

$ gcc réel_file.C -o Real_file

Si le fichier est compilé avec succès, exécutez le programme à l'aide de la commande:

$ ./ real_file

L'explication du script ci-dessus est:

  • Nous avons inclus deux fichiers d'en-tête; stdlib.H pour les fonctions de mémoire dynamique et STdio.H pour les fonctions d'entrée et de sortie
  • Variable du pointeur déclaré * PTR
  • A utilisé la fonction malloc () et a demandé au tas d'attribuer 200 octets, si la mémoire n'est pas attribuée par le tas, «la mémoire n'est pas allouée.»Sera affiché à l'aide de la fonction printf ()
  • Si la mémoire est attribuée, il arrivera à la fonction realloc () et redimensionnera la mémoire de 100 octets à 400 octets
  • Si le tas lui a attribué une mémoire de 500 octets; il affichera le («la mémoire a été créée avec succès»)

Conclusion

Dans la programmation C, l'allocation de mémoire dynamique est l'allocation manuelle de la mémoire en fonction de l'exigence du programme. Les fonctions malloc () et realloc () font partie de la mémoire dynamique; malloc () est utilisé pour l'allocation de mémoire et realloc () est utilisé pour la réallocation de la mémoire. Dans cet article, nous avons expliqué les deux; Fonctions malloc () et realloc (), comment elles fonctionnent et quelle est la syntaxe générale de l'utilisation des deux. Enfin, pour une meilleure compréhension, nous avons exécuté les exemples des deux fonctions.