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
Mary-Kate OlsenOriginal
2024-12-22 08:40:14196Durchsuche

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;
}

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!

Stellungnahme:
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