此程序:
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的幂。