Operatore __alignof
Sezione specifica Microsoft
Viene restituito un valore di tipo size_t, ovvero il requisito di allineamento del tipo.
__alignof(
type
)
Note
Di seguito è riportato un esempio.
Espressione |
Valore |
---|---|
__alignof( char ) |
1 |
__alignof( short ) |
2 |
__alignof( int ) |
4 |
__alignof( __int64 ) |
8 |
__alignof( float ) |
4 |
__alignof( double ) |
8 |
__alignof( char* ) |
4 |
Il valore __alignof è uguale al valore di sizeof per i tipi di base. Si consideri, in ogni caso, il seguente esempio:
typedef struct { int a; double b; } S;
// __alignof(S) == 8
In questo caso, il valore __alignof è il requisito di allineamento dell'elemento più grande presente nella struttura.
Analogamente, per
typedef __declspec(align(32)) struct { int a; } S;
__alignof(S) è uguale a 32.
Un utilizzo di __alignof sarebbe quello di parametro per una delle proprie routine di allocazione della memoria. Ad esempio, data la seguente struttura definita S, si potrebbe chiamare una routine di allocazione della memoria denominata aligned_malloc per allocare memoria su un particolare limite di allineamento.
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));
Per ulteriori informazioni sulla modifica dell'allineamento, vedere:
Esempi di allineamento di strutture (specifico per piattaforme x64)