__alignof (Operador)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

C++11 incluye por primera vez el operador alignof, que devuelve la alineación del tipo especificado en bytes. Para la máxima portabilidad, use el operador alignof en lugar del operador __alignof específico de Microsoft.

Específicos de Microsoft

Devuelve un valor de tipo size_t, que es el requisito de alineación del tipo.

  
        __alignof(   
   type    
)  

Por ejemplo:

ExpresiónValor
__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:

Para obtener más información sobre las diferencias de la alineación en código para x86 y x64, vea:

Expresiones con operadores unarios
Palabras clave de C++

Mostrar: