该程序:

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

返回4,GCC 10.1和clang 10.1,icc 19.0.1。

这让我感到奇怪-强制alignas()以这种方式影响sizeof()吗?即将尺寸增加到超出结构最初的尺寸?或-此更改只是实现的特权吗?

最佳答案



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

大小必须至少等于对齐方式,并且必须是对齐方式的倍数,并且对齐方式始终是2的幂。

08-16 07:48