gpt4 book ai didi

c++ - 即使有填充,Sizeof 结构也不清楚

转载 作者:太空狗 更新时间:2023-10-29 20:13:04 26 4
gpt4 key购买 nike

在下面的结构中,我觉得大小应该是 20,但结果是 24。

class X {
unsigned int a;
unsigned int b;
double c;
unsigned int d;
};

为什么编译器不能从 16-20 字节排列 d

最佳答案

这样一来,c 就可以在 X 数组中的 8 字节边界上保持对齐。

X x[2];

X[0]:
0-3 unsigned int a
4-7 unsigned int b
8-15 double c
16-19 unsigned int d
20-23 [PAD]
X[1]:
24-27 unsigned int a
28-31 unsigned int b
32-39 double c
40-43 unsigned int d
44-47 [PAD]

因此,您可以看到数组元素之间需要 4 个字节的填充。这是通过在对象末尾添加 4 个字节来捕获的。如果第二个数组元素从位置 20 开始,那么您会发现 x[1].c 不是 8 字节对齐的。

所以,最后,d 确实如您预期的那样从字节 16 开始,但 d 的结尾并不是对象的结尾。

关于c++ - 即使有填充,Sizeof 结构也不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23730114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com