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