Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C - Geheugenbeheer

In dit hoofdstuk wordt dynamisch geheugenbeheer in C uitgelegd. De programmeertaal C biedt verschillende functies voor geheugentoewijzing en -beheer. Deze functies zijn te vinden in de header-bestand.

Sr.nr. Functie en beschrijving
1

void *calloc(int num, int size);

Deze functie wijst een array van num . toe elementen waarvan de grootte in bytes grootte . zal zijn .

2

Void gratis(void *adres);

Deze functie geeft een blok geheugenblok vrij, gespecificeerd op adres.

3

void *malloc(size_t size);

Deze functie wijst een array van num . toe bytes en laat ze niet geïnitialiseerd.

4

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

Deze functie wijst het geheugen opnieuw toe en breidt het uit tot nieuwe grootte .

Geheugen dynamisch toewijzen

Als u zich tijdens het programmeren bewust bent van de grootte van een array, dan is het eenvoudig en kunt u het definiëren als een array. Als u bijvoorbeeld een naam van een persoon wilt opslaan, mag deze maximaal 100 tekens bevatten, dus u kunt iets als volgt definiëren −

char name[100];

Maar laten we nu eens kijken naar een situatie waarin u geen idee heeft van de lengte van de tekst die u moet opslaan, u wilt bijvoorbeeld een gedetailleerde beschrijving over een onderwerp opslaan. Hier moeten we een aanwijzer naar een teken definiëren zonder te definiëren hoeveel geheugen nodig is en later, op basis van de vereiste, kunnen we geheugen toewijzen zoals weergegeven in het onderstaande voorbeeld −

Live demo
#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 );
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op.

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

Hetzelfde programma kan worden geschreven met calloc(); het enige is dat je malloc als volgt door calloc moet vervangen −

calloc(200, sizeof(char));

U heeft dus volledige controle en u kunt elke groottewaarde doorgeven terwijl u geheugen toewijst, in tegenstelling tot arrays waar u deze niet kunt wijzigen nadat de grootte eenmaal is gedefinieerd.

Formaat wijzigen en geheugen vrijgeven

Wanneer uw programma uitkomt, geeft het besturingssysteem automatisch al het geheugen vrij dat door uw programma is toegewezen, maar als een goede gewoonte wanneer u geen geheugen meer nodig heeft, moet u dat geheugen vrijgeven door de functie free() .

Als alternatief kunt u de grootte van een toegewezen geheugenblok vergroten of verkleinen door de functie realloc() aan te roepen. . Laten we het bovenstaande programma nog eens controleren en gebruik maken van de functies realloc() en free() −

Live demo
#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);
}

Wanneer de bovenstaande code wordt gecompileerd en uitgevoerd, levert dit het volgende resultaat op.

Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

U kunt het bovenstaande voorbeeld proberen zonder extra geheugen toe te wijzen, en de functie strcat() geeft een foutmelding vanwege een gebrek aan beschikbaar geheugen in de beschrijving.


C Taal

  1. Modern niet-mechanisch geheugen
  2. Alleen-lezen geheugen (ROM)
  3. Microprocessors
  4. C++ Geheugenbeheer:nieuw en verwijderen
  5. C Dynamische geheugentoewijzing
  6. Java - Documentatie Opmerkingen
  7. C++ dynamisch geheugen
  8. Java 10 - Heaptoewijzing
  9. Handboek voor onderhoudsbeheer
  10. Activabeheer Evenementen 2012
  11. 4 doelen voor vermogensbeheer