Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

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 fichier d'en-tête.

void *calloc(int num, int size);

Cette fonction alloue un tableau de num éléments dont la taille en octets sera taille .

annuler libre(annuler *adresse) ;

Cette fonction libère un bloc de bloc mémoire spécifié par adresse.

annuler *malloc(size_t size);

Cette fonction alloue un tableau de num octets et laissez-les non initialisés.

void *realloc(void *address, int newsize);

Cette fonction réalloue la mémoire en l'étendant jusqu'à nouvelle taille .

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

  1. Mémoire en lecture seule (ROM)
  2. Microprocesseurs
  3. Gestion de la mémoire C++ :création et suppression
  4. C Allocation de mémoire dynamique
  5. Java - Commentaires sur la documentation
  6. Mémoire dynamique C++
  7. Java 10 - Allocation de tas
  8. Manuel de gestion de la maintenance
  9. Événements de gestion d'actifs 2012