Heim > Backend-Entwicklung > C++ > Wie hoch ist der Overhead bei der Zuordnung neuer Arrays wirklich?

Wie hoch ist der Overhead bei der Zuordnung neuer Arrays wirklich?

Mary-Kate Olsen
Freigeben: 2024-12-22 08:40:14
Original
248 Leute haben es durchsucht

How Much Overhead Does Placement-New Array Allocation Really Have?

Placement-New and Unspecified Array Allocation Overhead

Der C 11-Standard legt fest, dass der Placement-New-Ausdruck new(buffer) T[5] zu einem Aufruf führt zum Operator new[](sizeof(T)*5 y,buffer) wobei x und y nicht negative, nicht spezifizierte Werte sind, die die Array-Zuordnung darstellen Overhead.

Dies wirft jedoch Bedenken auf, wenn „placement-new“ mit einem vorab zugewiesenen Puffer verwendet wird. Wenn y größer als 0 ist, ist der zugewiesene Puffer möglicherweise nicht groß genug, um das Array aufzunehmen.

Bestimmen des Array-Zuteilungs-Overheads

Da der Standard den Wert von y nicht garantiert, ist er von entscheidender Bedeutung um es zur Laufzeit zu bestimmen. Ein Ansatz besteht darin, einen benutzerdefinierten Placement-New-Operator zu erstellen, der den verfügbaren Pufferplatz überprüft.

inline void* operator new[](std::size_t n, void* p, std::size_t limit)
{
    if (n <= limit)
        std::cout << "life is good\n";
    else
        throw std::bad_alloc();
    return p;
}
Nach dem Login kopieren

Durch Variieren der Array-Größe und Überprüfen von n im benutzerdefinierten New-Operator können Sie den Wert von y für Sie ableiten Plattform.

Aktualisierter Standard

Es ist wichtig zu beachten, dass dieses Problem im November 2019 durch einen Fehlerbericht behoben wurde, sodass es rückwirkend für alle gilt Versionen von C . Gemäß dem aktualisierten Standard beträgt der Overhead für den Operator new[](std::size_t, void* p) immer Null.

Daher gilt bei Verwendung der Bibliotheksfunktion Operator new[](std::size_t, void*) können Sie Ihren Puffer mit der genauen Größe vorab zuweisen, ohne sich Gedanken über einen nicht spezifizierten Zuordnungsaufwand machen zu müssen.

Das obige ist der detaillierte Inhalt vonWie hoch ist der Overhead bei der Zuordnung neuer Arrays wirklich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage