align
Ajusta o armazenamento do tamanho fornecido (alinhado pela especificação de alinhamento fornecido) no primeiro endereço possível do armazenamento fornecido.
void* align(
size_t Alignment, // input
size_t Size, // input
void*& Ptr // input/output
size_t& Space // input/output
);
Parâmetros
Alignment
O limite de alinhamento ser tentado.Size
O tamanho em bytes para o armazenamento alinhado.Ptr
O endereço inicial do pool de armazenamento contíguo disponível a ser usado. Esse parâmetro também é um parâmetro de saída e conterá o novo endereço inicial se o alinhamento for bem-sucedido.Se align() for malsucedido, esse parâmetro não será modificado.
Space
O espaço total disponível para align() a ser usado ao criar o armazenamento alinhado. Esse parâmetro também é um parâmetro de saída e contém o espaço ajustado deixado no buffer de armazenamento após o armazenamento alinhado e qualquer sobrecarga associada é subtraída.Se align() for malsucedido, esse parâmetro não será modificado.
Valor de retorno
Um ponteiro nulo se o buffer alinhado solicitado não se ajustar no espaço disponível. Caso contrário, o novo valor de Ptr.
Comentários
Os parâmetros modificados Ptr e Space permitem que você chame align() repetidamente no mesmo buffer, possivelmente com valores diferentes para Alignment e Size. O trecho de código a seguir mostra um uso de 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.
Requisitos
Cabeçalho: <memory>
Namespace: std