Maison > Article > développement back-end > L'allocation dynamique de mémoire est un mécanisme du langage C. Il permet aux programmes d'allouer et de libérer dynamiquement de l'espace mémoire au moment de l'exécution. En utilisant l'allocation dynamique de mémoire, un programme peut allouer dynamiquement de la mémoire selon ses besoins sans avoir à déterminer la taille de la mémoire au moment de la compilation. Cela permet aux programmes de gérer la mémoire de manière plus flexible et d'utiliser efficacement les ressources système disponibles.
Ici, nous allons apprendre ce qu'est l'allocation dynamique de mémoire en langage C. Le langage de programmation C fournit plusieurs fonctions d'allocation et de gestion de la mémoire. Ces fonctions se trouvent dans le fichier d'en-tête
Fonction | Description |
---|---|
void *calloc(int num, int size); | Cette fonction alloue un tableau de num éléments, chaque élément ayant une taille en octets comme unité. |
void free(void *address); | Cette fonction libère un bloc mémoire spécifié par l'adresse. |
void *malloc(int num); | Cette fonction alloue un tableau de num octets et le laisse non initialisé. |
void *realloc(void *address, int newsize); | Cette fonction réalloue la mémoire, l'étendant à newsize. |
Pendant la programmation, si vous connaissez la taille du tableau, il est alors facile de le définir comme un tableau. Par exemple, pour stocker le nom d'une personne, il peut contenir jusqu'à 100 caractères, vous pouvez donc le définir comme suit -
char name[100];
Mais considérons maintenant une situation dans laquelle vous ne connaissez pas la longueur du texte dont vous avez besoin pour stocker, par exemple, vous souhaitez stocker Une description détaillée d'un sujet. Ici, nous devons définir un pointeur vers le caractère sans définir la quantité de mémoire requise, puis, si nécessaire, nous pouvons allouer la mémoire comme indiqué dans l'exemple suivant -
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Adam"); /* allocate memory dynamically */ description = malloc( 200 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory</p><p>"); } else { strcpy( description, "Adam a DPS student in class 10th"); } printf("Name = %s</p><p>", name ); printf("Description: %s</p><p>", description ); }
Name = Zara Ali Description: Zara ali a DPS student in class 10th
La même chose peut être écrit à l'aide du programme calloc() ; le seul problème est que vous devez remplacer malloc par calloc comme indiqué ci-dessous -
calloc(200, sizeof(char));
Vous avez donc un contrôle total et pouvez transmettre n'importe quelle valeur de taille lors de l'allocation de mémoire, contrairement aux tableaux qui ont une taille une fois définie, vous je ne peux pas le changer.
Lorsque votre programme sortira, le système d'exploitation libérera 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 appeler la fonction free( ) pour libérer la mémoire.
Alternativement, vous pouvez augmenter ou diminuer la taille du bloc mémoire alloué en appelant la fonction realloc(). Vérifions à nouveau le programme ci-dessus et utilisons les fonctions realloc() et free() -
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char name[100]; char *description; strcpy(name, "Adam"); /* allocate memory dynamically */ description = malloc( 30 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory</p><p>"); } else { strcpy( description, "Adam 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</p><p>"); } else { strcat( description, "He is in class 10th"); } printf("Name = %s</p><p>", name ); printf("Description: %s</p><p>", description ); /* release memory using free() function */ free(description); }
Name = Adam Description: Adam a DPS student.He is in class 10th
Vous pouvez essayer l'exemple ci-dessus sans réallouer de la mémoire supplémentaire, la fonction strcat() La description donne un erreur due au manque de mémoire disponible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!