Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C - Speicherverwaltung

Dieses Kapitel erläutert die dynamische Speicherverwaltung in C. Die Programmiersprache C bietet mehrere Funktionen für die Speicherzuweisung und -verwaltung. Diese Funktionen finden Sie in Header-Datei.

Sr.No. Funktion &Beschreibung
1

void *calloc(int num, int size);

Diese Funktion weist ein Array von num zu Elemente, deren Größe in Byte jeweils Größe ist .

2

void free(void *address);

Diese Funktion gibt einen durch address.

angegebenen Speicherblock frei
3

void *malloc(size_t size);

Diese Funktion weist ein Array von num zu Bytes und lassen Sie sie nicht initialisiert.

4

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

Diese Funktion weist Speicher neu zu und erweitert ihn bis zu newsize .

Speicher dynamisch zuweisen

Wenn Sie sich beim Programmieren der Größe eines Arrays bewusst sind, ist es einfach und Sie können es als Array definieren. Um beispielsweise den Namen einer beliebigen Person zu speichern, darf dieser maximal 100 Zeichen lang sein, sodass Sie etwas wie folgt definieren können −

char name[100];

Betrachten wir nun eine Situation, in der Sie keine Ahnung haben, wie lang der zu speichernde Text sein muss, zum Beispiel möchten Sie eine detaillierte Beschreibung zu einem Thema speichern. Hier müssen wir einen Zeiger auf ein Zeichen definieren, ohne zu definieren, wie viel Speicher benötigt wird, und später können wir basierend auf den Anforderungen Speicher zuweisen, wie im folgenden Beispiel gezeigt −

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 );
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis.

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

Dasselbe Programm kann mit calloc(); geschrieben werden Sie müssen lediglich malloc wie folgt durch calloc ersetzen −

calloc(200, sizeof(char));

Sie haben also die vollständige Kontrolle und können beim Zuweisen von Speicher jeden beliebigen Größenwert übergeben, im Gegensatz zu Arrays, bei denen Sie die einmal definierte Größe nicht mehr ändern können.

Größe ändern und Speicher freigeben

Wenn Ihr Programm herauskommt, gibt das Betriebssystem automatisch den gesamten von Ihrem Programm zugewiesenen Speicher frei. Wenn Sie jedoch keinen Speicher mehr benötigen, sollten Sie diesen Speicher freigeben, indem Sie die Funktion free() .

Alternativ können Sie die Größe eines zugewiesenen Speicherblocks erhöhen oder verringern, indem Sie die Funktion realloc() aufrufen . Lassen Sie uns das obige Programm noch einmal überprüfen und die Funktionen realloc() und free() verwenden −

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);
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er das folgende Ergebnis.

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

Sie können das obige Beispiel ausprobieren, ohne zusätzlichen Speicher neu zuzuweisen, und die Funktion strcat() gibt einen Fehler aus, weil in der Beschreibung kein verfügbarer Speicher vorhanden ist.


C Sprache

  1. Nur-Lese-Speicher (ROM)
  2. Mikroprozessoren
  3. C++-Speicherverwaltung:neu und löschen
  4. C Dynamische Speicherzuweisung
  5. Java - Dokumentationskommentare
  6. Dynamischer C++-Speicher
  7. Java 10 - Heap-Zuweisung
  8. Handbuch Instandhaltungsmanagement
  9. Vermögensverwaltungsveranstaltungen 2012
  10. 4 Ziele für die Vermögensverwaltung