C - Gestion de la mémoire
Ce chapitre explique la gestion dynamique de la mémoire en C. Le langage de programmation C fournit plusieurs fonctions d'allocation et de gestion de la mémoire. Ces fonctions se trouvent dans le
Sr.No. | Fonction et description |
---|---|
1 | |
2 | |
3 | |
4 |
Allocation dynamique de mémoire
Lors de la programmation, si vous connaissez la taille d'un tableau, c'est facile et vous pouvez le définir comme un tableau. Par exemple, pour stocker le nom de n'importe quelle personne, il peut aller jusqu'à un maximum de 100 caractères, vous pouvez donc définir quelque chose comme suit −
char name[100];
Mais considérons maintenant une situation où vous n'avez aucune idée de la longueur du texte que vous devez stocker, par exemple, vous souhaitez stocker une description détaillée d'un sujet. Ici, nous devons définir un pointeur sur le caractère sans définir la quantité de mémoire requise et plus tard, en fonction des besoins, nous pouvons allouer de la mémoire comme indiqué dans l'exemple ci-dessous −
Démo en direct#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Zara Ali"); /* allocate memory dynamically */ description = malloc( 200 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcpy( description, "Zara ali a DPS student in class 10th"); } printf("Name = %s\n", name ); printf("Description: %s\n", description ); }
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant.
Name = Zara Ali Description: Zara ali a DPS student in class 10th
Le même programme peut être écrit en utilisant calloc(); la seule chose est que vous devez remplacer malloc par calloc comme suit −
calloc(200, sizeof(char));
Vous avez donc un contrôle total et vous pouvez passer n'importe quelle valeur de taille lors de l'allocation de mémoire, contrairement aux tableaux où une fois la taille définie, vous ne pouvez pas la modifier.
Redimensionner et libérer de la mémoire
Lorsque votre programme sort, le système d'exploitation libère automatiquement toute la mémoire allouée par votre programme, mais comme bonne pratique, lorsque vous n'avez plus besoin de mémoire, vous devez libérer cette mémoire en appelant la fonction free() .
Alternativement, vous pouvez augmenter ou diminuer la taille d'un bloc de mémoire alloué en appelant la fonction realloc() . Vérifions à nouveau le programme ci-dessus et utilisons les fonctions realloc() et free() −
Démo en direct#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Zara Ali"); /* allocate memory dynamically */ description = malloc( 30 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcpy( description, "Zara ali a DPS student."); } /* suppose you want to store bigger description */ description = realloc( description, 100 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcat( description, "She is in class 10th"); } printf("Name = %s\n", name ); printf("Description: %s\n", description ); /* release memory using free() function */ free(description); }
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant.
Name = Zara Ali Description: Zara ali a DPS student.She is in class 10th
Vous pouvez essayer l'exemple ci-dessus sans réallouer de mémoire supplémentaire, et la fonction strcat() donnera une erreur en raison du manque de mémoire disponible dans la description.
Langue C