alignof
演算子
alignof
演算子は、指定した型の配置を size_t
型の値としてバイト単位で返します。
構文
alignof( type )
解説
次に例を示します。
Expression | 値 |
---|---|
alignof( char ) |
1 |
alignof( short ) |
2 |
alignof( int ) |
4 |
alignof( long long ) |
8 |
alignof( float ) |
4 |
alignof( double ) |
8 |
alignof
値は、基本型の sizeof
値と同じです。 ただし、次の例を検討します。
typedef struct { int a; double b; } S;
// alignof(S) == 8
この場合、alignof
値は、構造体内の最大要素の配置要件です。
同様に、
typedef __declspec(align(32)) struct { int a; } S;
alignof(S)
と 32
が等価です。
alignof
の使用方法の 1 つは、独自のメモリ割り当てルーチンの 1 つへのパラメーターとしての使用です。 たとえば、次の定義済みの構造体 S
を指定して、aligned_malloc
という名前のメモリ割り当てルーチンを呼び出し、特定の配置境界にメモリを割り当てることができます。
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));
配置の変更の詳細については、次を参照してください。
x86 と x64 用のコード内の配置の違いの詳細については、
Microsoft 固有の仕様
alignof
と __alignof
は、Microsoft コンパイラと同意語です。 C++ 11 の標準の一部になる前に、Microsoft 固有 __alignof
の演算子によってこの機能が提供されました。 移植性を最大にするため、Microsoft 固有の __alignof
演算子ではなく、alignof
演算子を使用してください。
以前のバージョンとの互換性を確保するために、_alignof
は、コンパイラ オプション /Za
(言語拡張機能の無効化) が指定されていない限り、__alignof
の同意語です。