Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

La librairie <stdalign.h> (<cstdalign> en C++) (C11)

La librairie signal.h La macro alignas


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

Présentation de l'entête <stdalign.h>

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.

POSIX reprend cet entête en s'alignant sur le standard C ISO. Il n'ajoute donc pas de fonction, de structure ou de macro propre à <stdalign.h>.
En C23, 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.

Entête à inclure

#include <stdalign.h>  // <cstdalign> en C++

Eléments fournis par la librairie <stdalign.h>

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

Exemple d'utilisation

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;
}
Utilisation de stdalign.h

Sur une plate-forme classique, cet exemple peut produire l'affichage suivant.

alignof(int) == 4
adresse % 16 == 0

Sujets connexes

aligned_alloc
max_align_t
La librairie <stddef.h>


La librairie signal.h La macro alignas




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé