Condividi tramite


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

Vedere anche

Riferimenti

<memory>