C++-Programmierung/ Speicherverwaltung/ Placement new
Neben dem in C++ verwendeten Operator new
, der auf dem Haldenspeicher Platz reserviert, unterstützt Standard-C++ auch den sogenannten Platzierungsoperator new (engl. placement new), der es ermöglicht, ein neues Objekt einem vorbereiteten Puffer zuzuordnen. Hier der Vergleich der unterschiedlichen Speicherreservierungen:
void placement() {
string *q = new string("hi"); // Normale Speicherreservierung auf dem Haldenspeicher
char *buf = new char[1000]; // In voraus reservierter Pufferspeicher
string *p = new (buf) string("hi"); // Placement new
}
Verwendet wird dieses Konzept, wenn
- eine automatische Speicherbereinigung eingesetzt werden soll;
- ein Speicherpool verwendet werden soll;
- es kann die Leistung des Programms erhöhen;
- die Sicherheit vor Ausnahmen kann erhöht werden.
Nachteil ist die höhere Komplexität, für anzulegende Objekte zusätzlich Buffer vorzuhalten und zu verwalten, sowie auf deren Größenbeschränkungen acht zu geben. Derartige Aufgaben erledigt beim einfachen new
die Sprache und das Betriebssystem für das Programm (und den Programmierer).