Maison > développement back-end > C++ > le corps du texte

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.

WBOY
Libérer: 2023-09-07 11:49:02
avant
1412 Les gens l'ont consulté

动态内存分配(Dynamic Memory Allocation)是C语言中的一种机制。它允许程序在运行时动态地分配和释放内存空间。通过使用动态内存分配,程序可以根据需要动态地分配内存,而不需要在编译时确定内存大小。这使得程序能够更灵活地管理内存,并有效地利用可用的系统资源

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 . Les fonctions suivantes sont utilisées pour l'allocation de mémoire.

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.

Allocation dynamique de mémoire

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];
Copier après la connexion

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 -

Exemple de code

#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 );
}
Copier après la connexion

Sortie

Name = Zara Ali
Description: Zara ali a DPS student in class 10th
Copier après la connexion

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));
Copier après la connexion

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.

Redimensionnez l'emplacement mémoire

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() -

Exemple de code

#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);
}
Copier après la connexion

Output

Name = Adam
Description: Adam a DPS student.He is in class 10th
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal