C++:是否有理由为类型设置alignof > sizeof

met*_*sis 2 c++ types simd sizeof alignment

如这个问题所示,对齐方式可能大于类型的大小,只是不能创建它的数组。但是,您可以创建一个 char[alignof(T)] 和reinterpret_cast 数组以在其中插入元素。

所以问题就变成了,在某些情况下,alignof(T) > sizeof(T)会很有用吗?我唯一能想到的就是与 SIMD 边界对齐。

Pet*_*des 5

对齐大于 的数组的开头很有用,但这是数组对象的对齐,而不是元素类型的对齐。与 类似,允许对齐 SIMD 加载/存储 16 或 32 字节向量,这样它们就不能跨缓存线分割。Talignof(T)alignas(32) float arr[1024];

最后我检查了 GCC,如果你 typedef 一个版本的floatwith __attribute__((aligned(16))),如果你创建一个数组,每个元素占用 16 个字节,所以元素大小有效地增长,包括填充。链接的问答表明 clang 不会让您创建数组。