Opérateur alignof
L’opérateur alignof
retourne l’alignement en octets du type spécifié en tant que valeur de type size_t
.
Syntaxe
alignof( type )
Notes
Par exemple :
Expression | Valeur |
---|---|
alignof( char ) |
1 |
alignof( short ) |
2 |
alignof( int ) |
4 |
alignof( long long ) |
8 |
alignof( float ) |
4 |
alignof( double ) |
8 |
La alignof
valeur est identique à la valeur pour les sizeof
types de base. Observons toutefois l'exemple suivant :
typedef struct { int a; double b; } S;
// alignof(S) == 8
Dans ce cas, la alignof
valeur est l’exigence d’alignement du plus grand élément de la structure.
De même, pour
typedef __declspec(align(32)) struct { int a; } S;
alignof(S)
est égal à 32
.
Une utilisation alignof
serait un paramètre pour l’une de vos propres routines d’allocation de mémoire. Par exemple, dans la structure définie S
suivante, vous pouvez appeler une routine d'allocation de mémoire nommée aligned_malloc
pour allouer la mémoire sur une limite d'alignement particulière.
typedef __declspec(align(32)) struct { int a; double b; } S;
int n = 50; // array size
S* p = (S*)aligned_malloc(n * sizeof(S), alignof(S));
Pour plus d'informations sur la modification de l'alignement, consultez :
pack
align
__unaligned
/Zp
(Alignement des membres de struct)- Exemples d’alignement de structure x64
Pour plus d'informations sur les différences d'alignement dans le code pour x86 et x64, consultez :
Spécifique à Microsoft
alignof
et __alignof
sont des synonymes dans le compilateur Microsoft. Avant de faire partie de la norme en C++11, l’opérateur spécifique à __alignof
Microsoft a fourni cette fonctionnalité. Pour une portabilité maximale, vous devez utiliser l’opérateur alignof
au lieu de l’opérateur spécifique __alignof
à Microsoft.
Pour la compatibilité avec les versions précédentes, _alignof
est un synonyme de __alignof
, sauf si l’option du compilateur /Za
(Désactiver les extensions de langage) est spécifiée.