Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

<memory>