alignas() 对 sizeof() 的影响 - 强制性的?
alignas() effect on sizeof() - mandatory?
这个节目:
struct alignas(4) foo {};
int main() { return sizeof(foo); }
returns 4,使用 GCC 10.1 和 clang 10.1,以及 icc 19.0.1 .
这让我想知道 - alignas()
是否必须以这种方式影响 sizeof()
?即增加大小超过结构最初的大小?或者 - 这种变化只是实施的特权吗?
is it mandatory for alignas() to affect sizeof() this way? i.e. increase the size beyond what the structure would originally be sized at?
是的。 class 的大小根据该类型数组的元素之间的距离来定义。数组元素之间没有填充(除了类型内的填充,因此是大小的一部分)。如果大小小于对齐,那么相邻的数组元素将不可能满足该对齐。
大小必须至少与对齐方式一样多,并且必须是对齐方式的倍数,并且对齐方式始终是 2 的幂。
这个节目:
struct alignas(4) foo {};
int main() { return sizeof(foo); }
returns 4,使用 GCC 10.1 和 clang 10.1,以及 icc 19.0.1 .
这让我想知道 - alignas()
是否必须以这种方式影响 sizeof()
?即增加大小超过结构最初的大小?或者 - 这种变化只是实施的特权吗?
is it mandatory for alignas() to affect sizeof() this way? i.e. increase the size beyond what the structure would originally be sized at?
是的。 class 的大小根据该类型数组的元素之间的距离来定义。数组元素之间没有填充(除了类型内的填充,因此是大小的一部分)。如果大小小于对齐,那么相邻的数组元素将不可能满足该对齐。
大小必须至少与对齐方式一样多,并且必须是对齐方式的倍数,并且对齐方式始终是 2 的幂。