Garbage-Collection in C++

Suraj P 12 Oktober 2023
  1. Garbage Collection als Memory-Management-Technik
  2. Manuelle Speicherverwaltung in C++
  3. Probleme mit der manuellen Speicherverwaltung in C++
  4. Algorithmen für die Garbage Collection
Garbage-Collection in C++

In diesem Artikel lernen wir die Garbage Collection in C++ kennen.

Garbage Collection als Memory-Management-Technik

Garbage Collection ist eine der Speicherverwaltungstechniken, die in Programmiersprachen verwendet werden. Es ist eine automatische Speicherverwaltungstechnik, die als Feature für viele Programmiersprachen hinzugefügt wurde.

Der Garbage Collector sammelt oder beansprucht den Speicher, der Variablen oder Objekten zugeordnet ist, aber nicht mehr vom Programm verwendet wird; dies wird auch als Müll bezeichnet.

Zu beachten ist, dass der Garbage Collector nur Speicher oder Ressourcen wie Dateien verwaltet. UI-Fenster und Destruktoren werden nicht behandelt.

Sprachen wie Java, C# und die meisten Skriptsprachen haben eine Garbage Collection als Teil der Sprache für eine bessere Effizienz.

Aber in Sprachen wie C++ haben wir eine manuelle Speicherverwaltung, was bedeutet, dass der Programmierer dies manuell tun muss, indem er Befehle wie new,, delete, oder irgendeinen Algorithmus verwendet.

Manuelle Speicherverwaltung in C++

Die dynamische Speicherallokation ist eine Art von Speicher, der während der Laufzeit im heap-Bereich allokiert wird. Sobald wir aufhören, diese Erinnerung zu benutzen, muss sie freigegeben werden; Andernfalls kann es zu einem Speicherleck kommen.

Die Speicherzuweisung und -freigabe in C++ erfolgt manuell mit Befehlen wie new oder delete.. Das Schlüsselwort new allokiert den Speicher dynamisch vom Heap.

Sobald die Nutzung abgeschlossen ist, verwenden wir das Schlüsselwort delete, um den Speicher freizugeben und zu löschen. Intern ruft es den Destruktor auf, um den Speicher zu zerstören.

Daher sollte auf new immer der Befehl delete folgen, um Speicherlecks zu vermeiden.

Beispielcode:

#include <bits/stdc++.h>
using namespace std;

int main() {
  int *arr = new int[5];  // 5 blocks of memory allocated

  if (!arr)
    cout << "Memory allocation failed\n";
  else {
    for (int i = 0; i < 5; i++) arr[i] = i + 1;

    cout << "Value stored in memory blocks ";
    for (int i = 0; i < 5; i++) cout << arr[i] << " ";
  }

  delete[] arr;  // deallocates the block of memory
}

Ausgang:

Value stored in memory blocks 1 2 3 4 5

Probleme mit der manuellen Speicherverwaltung in C++

Ein großes Problem ist, dass wir möglicherweise vergessen, Löschen zu verwenden, was zu einem Speicherleck führt. Das zweite große Problem besteht darin, dass wir beim Umgang mit umfangreichen Programmen, bei denen viel dynamische Speicherzuweisung auftritt, möglicherweise versehentlich den bereits verwendeten Speicher freigeben.

Algorithmen für die Garbage Collection

Wir können verschiedene Garbage-Collection-Algorithmen wie mark and sweep,, copying, und reference counting verwenden, sodass ein Programm, insbesondere für Sprachen wie C++, gleichzeitig Garbage-Collection und manuelle Speicherverwaltung haben kann.

Jeder dynamischen Speicherzuordnung wird im Algorithmus Referenzzählung eine Referenzzählung zugeordnet. Der Referenzzähler erhöht sich, wenn eine neue Referenz erstellt wird, und wird dekrementiert, wenn eine Referenz gelöscht wird.

Wenn diese Zahl 0 erreicht, bedeutet dies, dass der Speicher nicht mehr verwendet wird und wir ihn freigeben können.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - C++ Memory