如这个问题中所示,对齐方式可能大于类型的大小,只是不能创建它的数组。 但是,您可以创建一个 char[alignof(T)] 数组和reinterpret_cast 来在其中插入元素。
所以问题就变成了,在某些情况下,alignof(T) > sizeof(T) 会“有用”吗? 我唯一能想到的就是与 SIMD 边界对齐。
T
的数组的 start 对齐得比
alignof(T)
更有用,但这是数组对象的对齐,而不是元素类型的对齐。与 alignas(32) float arr[1024];
一样,允许使用 16 或 32 字节向量对齐 SIMD 加载/存储,因此它们不能跨缓存行拆分。最后我检查了 GCC,如果您使用 float
键入
__attribute__((aligned(16)))
的版本,则如果创建数组,每个元素将占用 16 个字节,因此元素大小会有效增长,包括填充。链接的问答显示 clang 不会让您创建数组。