Partager via


align

Place le stockage de la taille donnée (aligné par la spécification d'alignement donnée) dans la première adresse possible du stockage donné.

void* align(
    size_t Alignment, // input
    size_t Size,      // input
    void*& Ptr        // input/output
    size_t& Space     // input/output
);

Paramètres

  • Alignment
    Limite d'alignement à tenter.

  • Size
    Taille en octets du stockage aligné.

  • Ptr
    Adresse de départ du pool de stockage contigu disponible à utiliser. Ce paramètre est également un paramètre de sortie. Il contiendra la nouvelle adresse de départ si l'alignement est réussi.

    Si align() échoue, ce paramètre n'est pas modifié.

  • Space
    Espace total disponible pour align() pour la création du stockage aligné. Ce paramètre est également un paramètre de sortie. Il contient l'espace ajusté restant dans la mémoire tampon de stockage une fois le stockage aligné et toute surcharge associée soustraite.

    Si align() échoue, ce paramètre n'est pas modifié.

Valeur de retour

Un pointeur null si la mémoire tampon alignée demandée est plus grande que l'espace disponible ; sinon, la nouvelle valeur de Ptr.

Notes

Les paramètres modifiés Ptr et Space permettent d'appeler align() à plusieurs reprises pour la même mémoire tampon, éventuellement avec des valeurs différentes pour Alignment et Size. L'extrait de code suivant illustre une utilisation 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.

Configuration requise

En-tête : <memory>

Espace de noms : std

Voir aussi

Référence

<memory>