Compartilhar via


Operador alignof

O operador alignof retorna o alinhamento em bytes do tipo especificado como um valor do tipo size_t.

Sintaxe

alignof( type )

Comentários

Por exemplo:

Expression Valor
alignof( char ) 1
alignof( short ) 2
alignof( int ) 4
alignof( long long ) 8
alignof( float ) 4
alignof( double ) 8

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 para 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:

Para obter mais informações sobre diferenças de alinhamento em código para x86 e x64, consulte:

Específico da Microsoft

alignof e __alignof são sinônimos no compilador da Microsoft. Antes de se tornar parte do padrão no C++11, o operador __alignof, específico da Microsoft, fornecia essa funcionalidade. Para obter a portabilidade máxima, você deve usar o operador alignof em vez do operador __alignof, específico da Microsoft.

Para compatibilidade com versões anteriores, _alignof é um sinônimo para __alignof, a menos que a opção do compilador /Za (Desabilitar extensões de linguagem) seja especificada.

Confira também

Expressões com operadores unários
Palavras-chave