Heim >Backend-Entwicklung >C++ >Wie viel Speicher sollten Sie für Array Placement-new in C vorab zuweisen?
Array Placement-New: Overhead bei der Pufferzuweisung verwalten
Der C 11-Standard ermöglicht die Array-Zuweisung mithilfe von Placement-New, wo der Speicher Der Standort wird manuell angegeben. Bei der Zuweisung kann jedoch ein nicht spezifizierter Overhead-Wert, der mit x und y bezeichnet wird, zur Puffergröße hinzugefügt werden. Dies wirft die Frage auf, wie die Speichermenge bestimmt werden kann, die vorab zugewiesen werden soll, wenn Array-Placement-New verwendet wird.
Das in 5.3.4 bereitgestellte Standardbeispiel [expr.new] veranschaulicht, dass new(buffer) std: :string[10] ruft intern den Operator new[](sizeof(std::string) * 10 y, buffer) auf. Dies impliziert, dass der Overhead-Wert y, wenn er ungleich Null ist, zu einem zu kleinen vorab zugewiesenen Puffer führen könnte.
Änderung: Eliminierung des Overheads für Standardplatzierungsfunktionen
Kürzlich wurde ein Fix eingeführt (Fehlerbericht im November 2019), der den nicht spezifizierten Overhead y bei Verwendung des Standard-Platzierungsfunktionsoperators eliminiert new[](std::size_t, void* p). Dies bedeutet, dass der Overhead für diese bestimmte Platzierungsfunktion durchgängig Null ist.
Auswirkungen auf benutzerdefinierte Platzierungsfunktionen
Während der Overhead für die Standard-Platzierungsfunktion entfernt wurde, ist er bleibt ein potenzielles Problem bei der Verwendung benutzerdefinierter Platzierungsfunktionen. In solchen Fällen ist es wichtig, sich nicht auf einen bestimmten Overhead-Wert zu verlassen. Stattdessen wird empfohlen, eine neue Funktion für ein benutzerdefiniertes Platzierungsarray zu implementieren, die den Overhead zur Laufzeit dynamisch bestimmen kann.
Indem Sie den Wert von n in einer neuen Funktion für ein benutzerdefiniertes Platzierungsarray untersuchen und ihn mit dem angegebenen Pufferlimit vergleichen, man kann den Overhead für eine bestimmte Plattform ableiten und die Pufferzuweisung entsprechend anpassen.
Fazit
Beim Arbeiten mit Arrays Platzierungsneu: Es ist wichtig, sich des potenziellen Mehraufwands bewusst zu sein, der mit benutzerdefinierten Platzierungsfunktionen verbunden ist. Durch die Implementierung einer neuen Funktion für ein benutzerdefiniertes Platzierungsarray, die den Overhead zur Laufzeit erkennen kann, wird sichergestellt, dass die richtige Speichermenge zugewiesen wird, und mögliche Zuordnungsfehler vermieden werden.
Das obige ist der detaillierte Inhalt vonWie viel Speicher sollten Sie für Array Placement-new in C vorab zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!