Accès rapide :
Présentation de l'entête <stdalign.h>
Entête à inclure
Eléments fournis par la librairie <stdalign.h>
Exemple d'utilisation
Sujets connexes
La librairie <stdalign.h>, introduite avec le standard C11, propose des noms plus lisibles pour
manipuler l'alignement des objets. Elle définit principalement les macros alignas et alignof,
respectivement équivalentes aux formes C11 _Alignas et _Alignof.
L'alignement indique à quelle adresse mémoire un objet peut être placé. Certains types doivent commencer à une
adresse multiple de 2, 4, 8 ou davantage. Le compilateur respecte ces contraintes automatiquement pour les types
usuels, mais alignas permet de demander explicitement un alignement plus fort quand c'est nécessaire.
<stdalign.h>.
alignas et alignof deviennent des mots-clés du langage. L'entête garde surtout un rôle
de compatibilité avec le code C11/C17 et les environnements qui suivent encore cette forme.
#include <stdalign.h> // <cstdalign> en C++
| Nom | Type | Description | Depuis |
|---|---|---|---|
alignas |
macro | Demande un alignement particulier pour un objet ou un type. | C11 |
alignof |
macro | Retourne la contrainte d'alignement d'un type. | C11 |
__alignas_is_defined et __alignof_is_defined |
macros | Macros de détection utilisables dans les directives du préprocesseur. | C11 |
L'exemple suivant réserve un petit tampon dont l'adresse doit respecter un alignement de 16 octets.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdint.h> #include <stdalign.h> #include <stdio.h> #include <stdlib.h> int main() { alignas( 16 ) unsigned char buffer[32]; printf( "alignof(int) == %zu\n", alignof( int ) ); printf( "adresse %% 16 == %lu\n", (unsigned long) ( (uintptr_t) buffer % 16 ) ); return EXIT_SUCCESS; } |
Sur une plate-forme classique, cet exemple peut produire l'affichage suivant.
alignof(int) == 4 adresse % 16 == 0
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :