__alignof (Operador)
Específicos de Microsoft
Devuelve un valor, de tipo size_t, que es el requisito de alineación del tipo.
__alignof(
type
)
Comentarios
Por ejemplo:
Expresión |
Valor |
---|---|
__alignof( char ) |
1 |
__alignof( short ) |
2 |
__alignof( int ) |
4 |
__alignof( __int64 ) |
8 |
__alignof( float ) |
4 |
__alignof( double ) |
8 |
__alignof( char* ) |
4 |
El valor de __alignof es igual que el valor de sizeof para los tipos básicos. Considere, no obstante, este ejemplo:
typedef struct { int a; double b; } S;
// __alignof(S) == 8
En este caso, el valor de __alignof es el requisito de alineación del elemento más grande de la estructura.
De igual forma, para
typedef __declspec(align(32)) struct { int a; } S;
__alignof(S) es igual a 32.
Un uso para __alignof sería como parámetro para una de sus propias rutinas de asignación de memoria. Por ejemplo, dada la siguiente estructura definida S, podría llamar a una rutina de asignación de memoria denominada aligned_malloc para asignar memoria en un límite de alineación determinado.
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));
Para obtener más información sobre la modificación de la alineación, vea:
Ejemplos de alineación de estructuras (específico de x64)