align
Inserisce l'archiviazione dalle dimensioni specificate, allineata in base alla specifica di allineamento specificata, nel primo indirizzo possibile dell'archiviazione specificata.
void* align(
size_t Alignment, // input
size_t Size, // input
void*& Ptr // input/output
size_t& Space // input/output
);
Parametri
Alignment
Limite di allineamento da tentare.Size
Dimensioni in byte dell'archivio allineato.Ptr
Indirizzo iniziale del pool di archiviazione contiguo disponibile da utilizzare. Questo parametro è anche un parametro di output e, se l'allineamento ha esito positivo, conterrà il nuovo indirizzo iniziale.Se align() ha esito negativo, questo parametro non viene modificato.
Space
Spazio totale disponibile per align() da utilizzare per la creazione di un'archivio allineato. Questo parametro è anche un parametro di output e contiene lo spazio modificato disponibile nel buffer di archiviazione dopo la sottrazione dell'archivio allineato e dell'eventuale sovraccarico associato.Se align() ha esito negativo, questo parametro non viene modificato.
Valore restituito
Puntatore Null se il buffer allineato richiesto non entra nello spazio disponibile; in caso contrario, il nuovo valore di Ptr.
Note
I parametri Ptr e Space modificati consentono di chiamare più volte align() nello stesso buffer, possibilmente con valori diversi per Alignment e Size. Nel frammento di codice riportato di seguito viene illustrato un utilizzo di 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.
Requisiti
Intestazione: <memory>
Spazio dei nomi: std