logo

Müllabfuhr in C

In Computersprachen, Müllabfuhr ist ein entscheidender Bestandteil der Speicherverwaltung. Dabei handelt es sich um den Vorgang, bei dem der Speicher eines Programms automatisch identifiziert und freigegeben wird. Der C-Programmierung fehlen integrierte Garbage-Collection-Funktionen, da es sich um eine handelt niedriges Niveau Programmiersprache. Allerdings gibt es eine Reihe von Bibliotheken, die Garbage-Collection-Funktionen für C-Programme anbieten. In diesem Artikel untersuchen wir die Garbage Collection in C und wie sie mithilfe von implementiert wird: Böhm-Demers-Weiser Garbage-Collector-Bibliothek.

C bietet über seine Funktionen Low-Level-Speicherverwaltungsmechanismen malloc() Und free()-Funktionen . Der free()-Methode wird verwendet, um Speicher freizugeben, wenn er nicht mehr benötigt wird, während die malloc()-Funktion wird verwendet, um Speicher während der Laufzeit dynamisch zuzuweisen. Die grundlegende Syntax dieser Funktionen lautet wie folgt:

 void* malloc(size_t size); void free(void* ptr); 

Ein Zeiger auf den Anfang des zugewiesenen Speichers wird von zurückgegeben malloc() Funktion im Austausch gegen ein Argument, das die Anzahl der zuzuordnenden Bytes angibt. Der Speicher, der zuvor von zugewiesen wurde malloc()-Methode wird von der freigegeben free()-Funktion , wodurch es für zusätzliche Zuweisungen zugänglich gemacht wird.

Das Speicherverwaltungssystem von C bietet zwar viel Flexibilität, belastet aber auch den Programmierer mit der Speicherverwaltung. Speicherlecks können durch unsachgemäße Verwendung von Speicherverwaltungsroutinen entstehen, wenn Speicher zugewiesen, aber nie freigegeben wird, oder durch Segmentierungsfehler, bei denen auf den Speicher zugegriffen wird, nachdem er freigegeben wurde.

Eine Speicherverwaltungstechnik namens Müllabfuhr Identifiziert und gibt automatisch Speicher frei, der nicht mehr von einem Programm verwendet wird. Müllabfuhr macht es für den Programmierer unnötig, den Speicher manuell zu verwalten, was das Risiko von Speicherlecks und Segmentierungsfehlern verringert.

Für C-Programme ist das Böhm-Demers-Weiser Angebote der Garbage-Collector-Bibliothek Müllsammeln Fähigkeiten. Mithilfe der Funktionssammlung der Bibliothek kann Speicher zugewiesen werden. Darüber hinaus kann nicht mehr verwendeter Speicher automatisch identifiziert und freigegeben werden. Die Bibliothek beschäftigt a Mark-and-Sweep Technik, um Erinnerungen zu finden und freizugeben.

Syntax:

Die grundlegende Syntax der Böhm-Demers-Weiser Die Funktionen der Garbage Collector-Bibliothek lauten wie folgt:

 #include void* GC_malloc(size_t size); void* GC_calloc(size_tnmemb, size_t size); void* GC_realloc(void* ptr, size_t size); void GC_free(void* ptr); 

In dieser Syntax ist die GC_calloc()-Funktion wird verwendet, um Speicher zuzuweisen und zu initialisieren null , während die GC_malloc()-Funktion Reserviert Speicher dynamisch. Ähnlich wie realloc()-Methode in C, die GC_realloc() Die Funktion wird verwendet, um Speicher neu zuzuweisen. Die Speicherfreigabe erfolgt über die GC_free()-Methode .

Dynamisches Java-Array

Werfen wir einen Blick auf eine Illustration davon Böhm-Demers-Weiser Garbage Collector-Bibliothek in Aktion. Das folgende Programm verwendet die GC_malloc()-Funktion um jedem Knoten Speicher zuzuweisen, während er eine verknüpfte Liste von Ganzzahlen erstellt. Danach werden die Werte der verknüpften Liste gedruckt und das Programm beendet.

 #include #include typedef struct node { int value; struct node* next; } node; int main() { GC_INIT(); node* head = GC_malloc(sizeof(node)); node* current = head; for (int i = 1; ivalue = i; current->next = GC_malloc(sizeof(node)); current = current->next; } current->next = NULL; current = head; while (current != NULL) { printf('%d
', current->value); current = current->next; } return 0; } 

Ausgabe:

Beim Ausführen des Programms wird folgende Ausgabe erzeugt:

 1 2 3 4 5 6 7 8 9 10 

Erläuterung:

In diesem Beispiel verwenden wir zunächst die GC_INIT() Funktion zum Initialisieren des Garbage Collectors. Anschließend wird der Hauptknoten der verknüpften Liste mithilfe von erstellt GC_malloc()-Methode , und der aktuelle Zeiger wird so geändert, dass er darauf zeigt. Der nächste Schritt besteht darin, mithilfe einer Schleife weitere Knoten zur verknüpften Liste hinzuzufügen und den Wert jedes Knotens dem Schleifenzähler zuzuweisen Variable i und sein nächster Zeiger auf den Knoten danach in der Liste. Um das Ende der Liste zu signalisieren, setzen wir schließlich den Next-Pointer des letzten Knotens in der Liste auf NULL .

Alphabetische Zahlen

Verwendung einer while-Schleife Wir gehen die Liste durch und drucken den Wert jedes Knotens aus. Anschließend drucken wir die Werte in der verknüpften Liste aus. Endlich haben wir 0 zurückgeben um zu zeigen, dass das Programm erfolgreich ausgeführt wurde.

Abschluss

In diesem Blogartikel haben wir uns das angeschaut Böhm-Demers-Weiser Implementierung der Garbage Collection in C durch die Garbage-Collector-Bibliothek. Wir haben die grundlegende Syntax der Garbage-Collector-Bibliotheksfunktionen untersucht und gezeigt, wie man sie in einem einfachen Beispielprogramm verwendet. Wir sprachen auch über die Ausgabe des Beispielprogramms und seine Bedeutung.

Gesamt, Müllabfuhr ist ein entscheidender Ansatz, der C-Programmierern bei der besseren und effektiveren Speicherverwaltung helfen kann. C-Programmierer können von der Garbage Collection profitieren und gleichzeitig eine Low-Level-Sprache verwenden Böhm-Demers-Weiser Garbage-Collector-Paket.