Operator __alignof
Specyficzne dla firmy Microsoft
Zwraca wartość typu size_t, czyli wymaganie wyrównania tego typu.
__alignof(
type
)
Uwagi
Na przykład:
Wyrażenie |
Wartość |
---|---|
__alignof( char ) |
1 |
__alignof( short ) |
2 |
__alignof( int ) |
4 |
__alignof( __int64 ) |
8 |
__alignof( float ) |
4 |
__alignof( double ) |
8 |
__alignof( char* ) |
4 |
Wartość __alignof jest taka sama, jak wartość sizeof dla typów podstawowych.Należy jednak wziąć pod uwagę ten przykład:
typedef struct { int a; double b; } S;
// __alignof(S) == 8
W tym przypadku, wartość __alignof jest wymaganiem wyrównania największego elementu w strukturze.
Podobnie dla
typedef __declspec(align(32)) struct { int a; } S;
Wartość parametru __alignof(S) jest równa wartości obiektu 32.
Jednym z zastosowań dla __alignof może być wykorzystanie jako parametr do jednej z własnych procedur alokacji pamięci.Na przykład, biorąc pod uwagę następująco zdefiniowaną strukturę S, można wywołać procedurę alokacji pamięci o nazwie aligned_malloc, aby przydzielić pamięć na określonej granicy wyrównania.
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));
Aby uzyskać więcej informacji na temat modyfikowania wyrównania, zobacz:
Przykłady struktury wyrównanie (specyficzne dla x64)