Operador __alignof
Específico da Microsoft
Retorna um valor, do tipo size_t, que é o requisito de alinhamento do tipo.
__alignof(
type
)
Comentários
Por exemplo:
Expressão |
Valor |
---|---|
__alignof( char ) |
1 |
__alignof( short ) |
2 |
__alignof( int ) |
4 |
__alignof( __int64 ) |
8 |
__alignof( float ) |
4 |
__alignof( double ) |
8 |
__alignof( char* ) |
4 |
O valor de __alignof é igual ao valor de sizeof para tipos básicos. Considere, no entanto, este exemplo:
typedef struct { int a; double b; } S;
// __alignof(S) == 8
Nesse caso, o valor de __alignof é o requisito de alinhamento do maior elemento na estrutura.
De maneira semelhante, para
typedef __declspec(align(32)) struct { int a; } S;
__alignof(S) é igual a 32.
Um uso de __alignof seria como um parâmetro para uma ou mais de suas próprias rotinas de alocação de memória. Por exemplo, dada a seguinte estrutura definida S, você poderia chamar uma rotina de alocação de memória de nome aligned_malloc para alocar memória em um limite de alinhamento específico.
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 obter mais informações sobre como modificar o alinhamento, consulte:
Exemplos de alinhamento estrutura (específico para x64)