__alignof__ 运算符(IBM 扩展)

__alignof__ 运算符是 C99 和 C++03 的语言扩展,用于返回 其操作数与之对齐的位置。 操作数可以是表达式或括号内的类型标识。 如果操作数是表示 lvalue 的表达式,那么 __alignof__ 返回的数字表示 lvalue 已知具有的对齐方式。 表达式的类型在编译时确定,但表达式本身不进行求值。 如果操作数是类型,那么数字表示目标平台上的类型通常需要的对齐。

__alignof__ 操作程序无法应用于以下情况:
  • 表示位字段的 lvalue
  • 函数类型
  • 未定义的结构或类
  • 类型不完整 (例如 void)

__alignof__ 运算符语法

读取语法图跳过可视语法图__alignof__ unary_expression(类型标识)

如果 type-id 是引用或引用类型,那么结果是引用类型的对齐。 如果 type-id 是数组,那么结果是数组元素类型的对齐。 如果 type-id 是基本类型,那么结果是实现定义的。

例如,在 AIX®上, __alignof__(wchar_t) 针对 32 位目标返回 2 ,针对 64 位目标返回 4

__alignof__ 的操作数可以是向量类型,前提是启用了向量支持。 例如
vector unsigned int v1 = (vector unsigned int)(10);
vector unsigned int *pv1 = &v1;
__alignof__(v1); // vector type alignment: 16.
__alignof__(&v1); // address of vector alignment: 4.
__alignof__(*pv1); // dereferenced pointer to vector alignment: 16.
__alignof__(pv1); // pointer to vector alignment: 4.
__alignof__(vector signed char); // vector type alignment: 16.
__attribute__((aligned)) 用于增加向量类型变量的对齐时, __alignof__ 运算符返回的值是 __attribute__((aligned))指定的对齐因子。