__alignof__ 运算符(IBM 扩展)
__alignof__ 运算符是 C99 和 C++03 的语言扩展,用于返回 其操作数与之对齐的位置。 操作数可以是表达式或括号内的类型标识。 如果操作数是表示 lvalue 的表达式,那么 __alignof__ 返回的数字表示 lvalue 已知具有的对齐方式。 表达式的类型在编译时确定,但表达式本身不进行求值。 如果操作数是类型,那么数字表示目标平台上的类型通常需要的对齐。
__alignof__ 操作程序无法应用于以下情况:- 表示位字段的 lvalue
- 函数类型
- 未定义的结构或类
- 类型不完整 (例如
void)
如果 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))指定的对齐因子。