Heim  >  Artikel  >  Backend-Entwicklung  >  Die 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.

Die 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.

WBOY
WBOYnach vorne
2023-09-07 11:49:021361Durchsuche

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

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 -Header-Datei. Die folgenden Funktionen werden für die Speicherzuweisung verwendet.

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.

Speicher dynamisch zuweisen

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:

Beispielcode

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

Ausgabe

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.

Ändern Sie die Größe des Speicherorts

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 -

Beispielcode

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

Ausgabe

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen