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:
pack
align
__unaligned
/Zp
(Alinhamento de membro do struct)- Exemplos de alinhamento de estrutura x64
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.