Udostępnij za pośrednictwem


align

Pasuje do pamięci o danym rozmiarze — wyrównany przez daną specyfikację wyrównania — do pierwszego możliwego adresu danej pamięci.

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

Parametry

  • Alignment
    Wyrównanie powiązane z próbą.

  • Size
    Rozmiar w bajtach dla wyrównanej pamięci.

  • Ptr
    Adres początkowy dostępnej puli ciągłej pamięci, która ma być użyta.Ten parametr to również parametr wyjściowy, będzie zawierał nowy adres początkowy, jeśli wyrównanie zakończy się pomyślnie.

    Jeśli align() się nie powiedzie, ten parametr nie będzie zmodyfikowany.

  • Space
    Całkowita ilość miejsca dostępna dla align() w celu utworzenia wyrównanej pamięci.Ten parametr to również parametr wyjściowy, zawiera skorygowane miejsce pozostawione w buforze pamięci po odjęciu wyrównanej pamięci i wszystkich powiązanych obciążeń.

    Jeśli align() się nie powiedzie, ten parametr nie będzie zmodyfikowany.

Wartość zwracana

Wskaźnik zerowy, jeśli żądany wyrównany bufor nie pasuje do dostępnego miejsca; w przeciwnym razie nowa wartość Ptr.

Uwagi

Zmodyfikowane parametry Ptr i Space umożliwiają wywołanie align() wielokrotnie pod rząd na tym samym buforze, ewentualnie z różnymi wartościami dla Alignment i Size.Poniższy fragment kodu demonstruje jedno użycie 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.

Wymagania

Nagłówek: <memory>

Przestrzeń nazw: std

Zobacz też

Informacje

<memory>