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 の同意語です。

関連項目

単項演算子を含む式
キーワード