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

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

此程序:

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

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

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

c++ c++11 language-lawyer sizeof alignas
1个回答
2
投票

这让我怀疑-alignas()是否必须以这种方式影响sizeof()?即增加尺寸,使其超出结构最初的尺寸?

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

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

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