align
Přizpůsobí úložiště určité velikosti, zarovnané danou specifikací zarovnání, do první možné adresy daného úložiště.
void* align(
size_t Alignment, // input
size_t Size, // input
void*& Ptr // input/output
size_t& Space // input/output
);
Parametry
Alignment
Zarovnání čekající na pokus.Size
Velikost v bajtech pro zarovnané úložiště.Ptr
Počáteční adresa dostupného nepřetržitého fondu úložiště, který chcete použít.Tento parametr je také výstupní parametr a bude obsahovat novou počáteční adresu, pokud je zarovnání úspěšné.Pokud je align() neúspěšné, nebude tento parametr změněn.
Space
Celkové místo k dispozici pro align() k použití při vytváření zarovnaného úložiště.Tento parametr je také výstupní parametr a obsahuje zbývající upravené místo ve vyrovnávací paměti úložiště po odečtení zarovnaného úložiště a veškeré přidružené režie.Pokud je align() neúspěšné, nebude tento parametr změněn.
Vrácená hodnota
Ukazatel s hodnotou null, pokud se požadovaná zarovnaná vyrovnávací paměť nevejde do dostupného prostoru; v opačném případě nová hodnota Ptr.
Poznámky
Upravené parametry Ptr a Space umožňují volat align() opakovaně na stejné vyrovnávací paměti, s možností jiných hodnot pro Alignment a Size.Následující fragment kódu ukazuje příklad použití align().
#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.
Požadavky
Hlavička: <memory>
Obor názvů: std