__alignof – operátor
Specifické pro Microsoft
Vrátí hodnotu typu size_t, to znamená požadavek zarovnání typu.
__alignof(
type
)
Poznámky
Příklad:
Výraz |
Value |
---|---|
__alignof( char ) |
1 |
__alignof( short ) |
2 |
__alignof( int ) |
4 |
__alignof( __int64 ) |
8 |
__alignof( float ) |
4 |
__alignof( double ) |
8 |
__alignof( char* ) |
4 |
Hodnota __alignof je stejná jako hodnota sizeof pro základní typy.Uvažme však tento příklad:
typedef struct { int a; double b; } S;
// __alignof(S) == 8
V tomto případě je hodnota __alignof požadavek zarovnání největšího prvku ve struktuře.
Podobně pro
typedef __declspec(align(32)) struct { int a; } S;
__alignof(S) se rovná 32.
Jedno použití __alignof je jako parametr pro jednu z vlastních rutin přidělení paměti.Například s ohledem na následující definovanou strukturu S, lze volat rutinu přidělení paměti s názvem aligned_malloc pro přidělení paměti na hranici určitého zarovnání.
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));
Další informace o úpravách zarovnání naleznete v:
Příklady zarovnání struktur (specifické pro x64)