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é

Macro alignas (C11)

La librairie stdalign.h La macro alignof


Entête à inclure

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

Macro alignas

#define alignas _Alignas

La macro alignas permet de demander une contrainte d'alignement explicite sur une déclaration. Elle est utile quand une zone mémoire doit respecter une contrainte particulière : échange avec du code bas niveau, accès vectorisés, blocs utilisés par certaines bibliothèques ou formats binaires.

Le nom alignas est une macro en C11/C17. En C23, il devient un mot-clé du langage.

Exemple de code

L'exemple suivant déclare deux tampons, dont le second demande explicitement un alignement de 32 octets.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
#include <stdint.h>
#include <stdalign.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

    unsigned char regularBuffer[32];
    alignas( 32 ) unsigned char alignedBuffer[32];

    printf( "regularBuffer %% 32 == %lu\n", (unsigned long) ( (uintptr_t) regularBuffer % 32 ) );
    printf( "alignedBuffer %% 32 == %lu\n", (unsigned long) ( (uintptr_t) alignedBuffer % 32 ) );

    return EXIT_SUCCESS;
}
Demander un alignement explicite

Le premier résultat dépend de l'adresse choisie par le compilateur. Le second doit être nul.

regularBuffer % 32 == 16
alignedBuffer % 32 == 0

Sujets connexes

alignof
aligned_alloc
max_align_t


La librairie stdalign.h La macro alignof




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