#include <stdalign.h> // <cstdalign> en C++
#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.
alignas est une macro en C11/C17. En C23, il devient un mot-clé du langage.
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; } |
Le premier résultat dépend de l'adresse choisie par le compilateur. Le second doit être nul.
regularBuffer % 32 == 16 alignedBuffer % 32 == 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 :