Zuweisen und Freigeben des Speichers in C++

Muhammad Adil 16 Februar 2024
  1. Zuweisen und Freigeben des Speichers mit den Operatoren new und delete
  2. Weisen Sie den Speicher mithilfe der C-Standardbibliothek zu und geben Sie die Zuweisung frei
  3. Vorteile der dynamischen Speicherzuweisung mit der Standardbibliothek
Zuweisen und Freigeben des Speichers in C++

Der Compiler steuert automatisch den Speicher, der Variablen in anderen Programmiersprachen wie Java und Python zugewiesen wird. Aber in C++ ist das nicht der Fall.

Seit ihrer Entstehung sind Speicherzuordnung und -freigabe integraler Bestandteil der C++-Sprache. Es ist für die Verwaltung des dynamischen Speichers im Programm verantwortlich, was die Zuweisung von Speicher zur Verwendung während der Programmausführung, die Freigabe von zugewiesenem Speicher, wenn er nicht mehr benötigt wird, und die Bestimmung, was mit dem zugewiesenen Speicher geschieht, wenn das Programm endet, umfasst.

Die Speicherzuweisung und -freigabe werden vom virtuellen Speichermanager des Betriebssystems verwaltet, der eine Paging-Technik verwendet.

Die Programmiersprache C++ bietet mehrere Funktionen zum Zuweisen und Freigeben von Speicher. Zu diesen Funktionen gehören malloc, calloc, realloc, free, new und delete.

Beginnen wir mit den Operatoren new und delete.

Zuweisen und Freigeben des Speichers mit den Operatoren new und delete

der neue Operator

Der Operator new allokiert den Speicher für ein Objekt eines bestimmten Typs. Zuerst erstellt es ein neues Objekt im Speicher, das dann mit Werten initialisiert werden kann.

Wenn kein Wert angegeben ist, wird der Standardkonstruktor verwendet, um das Objekt zu initialisieren. Die Syntax des new-Operators lautet:

pointer - variable = new data - type

In diesem Fall wird der Zeiger vom Typ Datentyp verwendet. Als Datentyp kann jeder eingebaute Datentyp, einschließlich Arrays, oder jeder benutzerdefinierte Datentyp, einschließlich Struktur und Klasse, verwendet werden.

Was ist, wenn während der Programmausführung nicht genügend Speicher verfügbar ist?

Wenn in einem Heap nicht genügend Speicher zum Zuweisen vorhanden ist, schlägt die neue Anforderung fehl, indem eine Fehlermeldung des Typs std::bad alloc ausgegeben wird; wenn jedoch nothrow mit dem new-Operator verwendet wird, gibt es in diesem Szenario einen NULL-Zeiger zurück. Daher ist es wichtig, vor dem Ausführen des Programms nach der Zeigervariable von new zu suchen.

der delete-Operator

Der delete-Operator gibt den vom new-Operator zugewiesenen Speicher frei oder hebt die Zuweisung auf. Die Syntax des delete-Operators ist wie folgt:

delete pArray;

Hier bezieht sich pArray auf ein Array, das mit dem Operator new zugewiesen wurde.

Typischerweise führt der Operator delete zwei Funktionen aus:

  • Zuerst zerstört es das Objekt, indem es seinen Destruktor aufruft.
  • Es gibt den Speicher frei.

Beispiel mit den Operatoren new und delete:

#include <iostream>
using namespace std;

int main() {
  int* x;
  x = new int;
  *x = 34;
  cout << *x << endl;
  delete x;
  return 0;
}

In diesem Beispiel haben wir zuerst den Speicher mit dem Operator new zugewiesen und ihn dann mit dem Operator delete freigegeben.

Klicken Sie hier, um die Funktion des Codes wie oben erwähnt zu überprüfen.

Weisen Sie den Speicher mithilfe der C-Standardbibliothek zu und geben Sie die Zuweisung frei

Mit malloc(), free() und realloc() erleichtert die C-Standardbibliothek das Zuweisen und Freigeben von Speicher. Diese Funktionen sind in der Sprache C++ verfügbar.

die malloc()-Funktion

malloc() ist eine Funktion in der Programmiersprache C++, die einen zusammenhängenden Speicherplatz der angegebenen Größe zuweist. Es wird verwendet, um dynamischen Speicher für Variablen, Arrays und andere Datenstrukturen zuzuweisen.

Die Funktion malloc() akzeptiert drei Argumente:

  1. Das erste Argument gibt die Anzahl der zuzuweisenden Bytes an.
  2. Das zweite Argument gibt den Typ der zuzuweisenden Daten an.
  3. Das dritte Argument ist eine Adresse, wo die zugewiesenen Daten gespeichert werden sollen.

die free()-Funktion

Die Funktion free() in C++ gibt einen Speicherbereich frei oder hebt die Zuweisung auf, der zuvor mit dem Operator malloc() zugewiesen wurde. Es gibt diesen Speicherbereich an das System zurück, damit er später wiederverwendet werden kann.

die realloc()-Funktion

realloc() ist eine Funktion, die die Größe eines Speicherblocks ändern kann. Es wird verwendet, um die Größe einer Zuordnung zu ändern, typischerweise um sie zu vergrößern, wenn sie erschöpft ist.

realloc() nimmt drei Parameter entgegen: einen Zeiger auf die alte Zuweisung, Informationen zur neuen Zuweisung und eine neue Größe für die neue Zuweisung.

Der alte Zeiger zeigt auf den ursprünglich zugewiesenen Speicherblock vor der Neuzuweisung, und die neuen Informationen bedeuten auf den neu zugewiesenen Speicher nach der Neuzuweisung. Die neue Größe gibt an, wie viel Platz diesem Block zugewiesen werden soll, indem seine Länge in Bytes oder die Anzahl der Elemente angegeben wird, wenn dieser Parameter nicht angegeben ist.

Vorteile der dynamischen Speicherzuweisung mit der Standardbibliothek

Die Bibliothek bietet mehrere Arten von Funktionen zur Verwaltung des dynamischen Speichers, wie z. B.:

  1. Speicherblöcke auf dem Heap zuweisen und freigeben;
  2. Kopieren von Daten zwischen Blöcken von zugewiesenem Speicher;
  3. Zugriff auf die Größe eines zugewiesenen Speicherblocks zur Laufzeit;
  4. Prüfen, ob ein Block von zugewiesenem Speicher leer ist; Und
  5. Alle Blöcke in einem Haufen auf einmal freigeben.
Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook

Verwandter Artikel - C++ Memory