Partilhar via


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

Consulte também

Referência

<memory>