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