该程序:
struct alignas(4) foo {};
int main() { return sizeof(foo); }
返回4,GCC 10.1和clang 10.1,icc 19.0.1。
这让我感到奇怪-强制
alignas()
以这种方式影响sizeof()
吗?即将尺寸增加到超出结构最初的尺寸?或-此更改只是实现的特权吗? 最佳答案
是。类的大小是根据该类型数组的元素之间的距离定义的。数组元素之间没有填充(填充在类型之内,因此在大小的一部分之内)。如果大小小于对齐方式,则相邻数组元素将无法满足该对齐方式。
大小必须至少等于对齐方式,并且必须是对齐方式的倍数,并且对齐方式始终是2的幂。