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
的同义词。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈