Hier lernen wir, was dynamische Speicherzuweisung in der Sprache C ist. Die Programmiersprache C bietet mehrere Funktionen zur Speicherzuweisung und -verwaltung. Diese Funktionen finden Sie in der
Funktion | Beschreibung |
---|---|
void *calloc(int num, int size); | Diese Funktion weist ein Array von num Elementen zu, wobei die Größe jedes Elements in Bytes als Einheit angegeben ist. |
void free(void *address); | Diese Funktion gibt einen durch die Adresse angegebenen Speicherblock frei. |
void *malloc(int num); | Diese Funktion weist ein Array von num Bytes zu und lässt es nicht initialisiert. |
void *realloc(void *address, int newsize); | Diese Funktion weist Speicher neu zu und erweitert ihn auf newsize. |
Wenn Sie beim Programmieren die Größe des Arrays kennen, ist es einfach, es als Array zu definieren. Um beispielsweise den Namen einer beliebigen Person zu speichern, kann dieser bis zu 100 Zeichen enthalten, sodass Sie Folgendes definieren können:
char name[100];
Aber betrachten wir nun eine Situation, in der Sie die Länge des benötigten Textes nicht kennen Zum Speichern möchten Sie beispielsweise eine detaillierte Beschreibung eines Themas speichern. Hier müssen wir einen Zeiger auf das Zeichen definieren, ohne zu definieren, wie viel Speicher erforderlich ist, und dann können wir den Speicher nach Bedarf zuweisen, wie im folgenden Beispiel gezeigt:
#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
Das Gleiche kann sein geschrieben mit dem Programm calloc(); das einzige Problem besteht darin, dass Sie malloc durch calloc ersetzen müssen, wie unten gezeigt -
calloc(200, sizeof(char));
Sie haben also die volle Kontrolle und können bei der Speicherzuweisung einen beliebigen Größenwert übergeben, im Gegensatz zu Arrays, deren Größe einmal definiert ist kann es nicht ändern.
Wenn Ihr Programm herauskommt, gibt das Betriebssystem automatisch den gesamten von Ihrem Programm zugewiesenen Speicher frei. Wenn Sie den Speicher jedoch nicht mehr benötigen, sollten Sie als bewährte Methode die Funktion free( ) aufrufen. um den Speicher freizugeben.
Alternativ können Sie die Größe des 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 -
#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
Sie können das obige Beispiel ausprobieren, ohne zusätzlichen Speicher neu zuzuweisen. Die Funktion strcat() wird dies tun. Die Beschreibung gibt eine Fehler aufgrund mangelnden verfügbaren Speichers.
Das obige ist der detaillierte Inhalt vonDie dynamische Speicherzuweisung ist ein Mechanismus in der C-Sprache. Es ermöglicht Programmen, zur Laufzeit dynamisch Speicherplatz zuzuweisen und freizugeben. Durch die Verwendung der dynamischen Speicherzuweisung kann ein Programm Speicher je nach Bedarf dynamisch zuweisen, ohne die Speichergröße zur Kompilierungszeit bestimmen zu müssen. Dadurch können Programme den Speicher flexibler verwalten und die verfügbaren Systemressourcen effizienter nutzen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!