alignof
Operátor
Operátor alignof
vrátí zarovnání v bajtech zadaného typu jako hodnotu typu size_t
.
Syntaxe
alignof( type )
Poznámky
Příklad:
Expression | Hodnota |
---|---|
alignof( char ) |
1 |
alignof( short ) |
2 |
alignof( int ) |
4 |
alignof( long long ) |
8 |
alignof( float ) |
4 |
alignof( double ) |
8 |
Hodnota alignof
je stejná jako hodnota pro sizeof
základní typy. Uvažme však tento příklad:
typedef struct { int a; double b; } S;
// alignof(S) == 8
V tomto případě alignof
je hodnota požadavkem zarovnání největšího prvku ve struktuře.
Podobně pro
typedef __declspec(align(32)) struct { int a; } S;
alignof(S)
je rovno 32
.
Jedno použití alignof
by bylo jako parametr pro jednu z vašich vlastních rutin přidělování 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:
Další informace o rozdílech v zarovnání v kódu pro x86 a x64 najdete v tématech:
specifické pro společnost Microsoft
alignof
a __alignof
jsou synonymy v kompilátoru Microsoftu. Než se stal součástí standardu v jazyce C++11, operátor specifický pro __alignof
Microsoft tuto funkci poskytl. Pro maximální přenositelnost byste měli místo operátora specifického pro __alignof
Microsoft použít alignof
operátor.
Kvůli kompatibilitě s předchozími verzemi _alignof
je synonymem, pokud __alignof
není zadána možnost /Za
kompilátoru (Zakázat jazyková rozšíření ).
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro