alignas() 对 sizeof() 的影响 - 强制性的?

alignas() effect on sizeof() - mandatory?

本文关键字:强制性 sizeof alignas 影响      更新时间:2023-10-16

这个程序:

struct alignas(4) foo {};
int main() { return sizeof(foo); }

返回 4,GCC 10.1 和 clang 10.1,以及 ICC 19.0.1。

这让我想知道 -alignas()是否必须以这种方式影响sizeof()? 即增加超出结构最初大小的大小?或者 - 此更改只是实现的特权吗?

alignas(( 是否必须以这种方式影响 sizeof((? 即增加超出结构最初大小的大小?

是的。类的大小是根据该类型的数组的元素之间的距离定义的。数组的元素之间没有填充(类型内的填充除外,因此是大小的一部分(。如果大小小于对齐,则相邻数组元素将无法满足该对齐。

大小必须至少与对齐一样多,并且必须是对齐的倍数,并且对齐始终是 2 的幂。