alignof 运算符

alignof 运算符将指定类型的对齐方式(以字节为单位)作为类型 size_t 的值返回。

语法

alignof( type )

备注

例如:

表达式
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 的用途之一是作为某个内存分配例程的参数。 例如,假定下面定义的结构 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 运算符提供了此功能。 为实现最大的可移植性,应使用 alignof 运算符,而不是 Microsoft 专用的 __alignof 运算符。

为了与以前的版本兼容,除非指定了编译器选项 /Za(禁用语言扩展),否则 _alignof__alignof 的同义词。

另请参阅

使用一元运算符的表达式
关键字