Freigeben über


align

Passt Speicher in der vorgegebenen Größe – ausgerichtet mithilfe der festgelegten Ausrichtungsspezifikation – in die erste mögliche Adresse des angegebenen Speichers ein.

void* align(
    size_t Alignment, // input
    size_t Size,      // input
    void*& Ptr        // input/output
    size_t& Space     // input/output
);

Parameter

  • Alignment
    Die auszuprobierende Ausrichtungsgrenze.

  • Size
    Die Größe in Bytes für den ausgerichteten Speicher.

  • Ptr
    Die Startadresse des verfügbaren zusammenhängenden Speicherpools, der verwendet werden soll. Dieser Parameter ist auch ein Ausgabeparameter und enthält die neue Startadresse, wenn die Ausrichtung erfolgreich ist.

    Wenn align() nicht erfolgreich ist, wird dieser Parameter nicht geändert.

  • Space
    Der gesamte verfügbare Speicherplatz, den align() beim Erstellen des ausgerichteten Speichers verwendet. Dieser Parameter ist auch ein Ausgabeparameter und enthält den angepassten Speicherplatz, der im Speicherpuffer verblieben ist, nachdem der ausgerichtete Speicher und der zugeordnete Mehraufwand subtrahiert wurden.

    Wenn align() nicht erfolgreich ist, wird dieser Parameter nicht geändert.

Rückgabewert

Ein NULL-Zeiger, wenn der angeforderte ausgerichtete Puffer nicht in den verfügbaren Speicherplatz passt; andernfalls der neue Wert für Ptr.

Hinweise

Die geänderten Parameter Ptr und Space ermöglichen es Ihnen, align() im gleichen Puffer wiederholt aufzurufen, möglicherweise mit verschiedenen Werten für Alignment und Size . Im folgenden Codeausschnitt wird eine Verwendung von align() veranschaulicht:

#include <type_traits> // std::alignment_of()
#include <memory>
//...
char buffer[256]; // for simplicity
size_t alignment = std::alignment_of<int>::value;
void * ptr = buffer;
std::size_t space = sizeof(buffer); // Be sure this results in the true size of your buffer

while (alignment, sizeof(MyObj), ptr, space)) {
    // You now have storage the size of MyObj, starting at ptr, aligned on 
    // int boundary. Use it here if you like, or save off the starting address
    // contained in ptr for later use.
    // ...
    // Last, move starting pointer and decrease available space before
    // the while loop restarts.
    ptr = reinterpret_cast<char*>(ptr) + sizeof(MyObj);
    space -= sizeof(MyObj);
}
// At this point, align() has returned a null pointer, signaling it is not
// possible to allow more aligned storage in this buffer.

Anforderungen

Header: <memory>

Namespace: std

Siehe auch

Referenz

<memory>