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

问题描述 投票:0回答:1

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

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

c++ types alignment simd sizeof
1个回答
0
投票
T

的数组start 对齐得比

alignof(T)
更有用,但这是数组对象的对齐,而不是元素类型的对齐。与
alignas(32) float arr[1024];
一样,允许使用 16 或 32 字节向量对齐 SIMD 加载/存储,因此它们不能跨缓存行拆分。
最后我检查了 GCC,如果您使用 

float

键入

__attribute__((aligned(16)))
的版本,则如果创建数组,每个元素将占用 16 个字节,因此元素大小会有效增长,包括填充。链接的问答显示 clang 不会让您创建数组。
    

© www.soinside.com 2019 - 2024. All rights reserved.