__alignof, opérateur
Section spécifique à Microsoft
Retourne une valeur, de type size_t, qui est la spécification d'alignement du type.
__alignof(
type
)
Notes
Par exemple :
Expression |
Valeur |
---|---|
__alignof( char ) |
1 |
__alignof ( short ) |
2 |
__alignof( int ) |
4 |
__alignof ( __int64 ) |
8 |
__alignof ( float ) |
4 |
__alignof ( double ) |
8 |
__alignof( char* ) |
4 |
La valeur de __alignof est identique à la valeur de sizeof pour les types de base. Observons toutefois l'exemple suivant :
typedef struct { int a; double b; } S;
// __alignof(S) == 8
Dans ce cas, la valeur de __alignof est la spécification 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.
__alignof peut par exemple servir de paramètre à une de vos propres routines d'allocation de mémoire. Par exemple, dans la structure définie Ssuivante, 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 :
Exemples d'alignement de structure (spécifique à x64)