加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 即使使用填充,Sizeof结构也不清晰

发布时间:2020-12-16 09:52:17 所属栏目:百科 来源:网络整理
导读:在下面的结构中,我觉得大小应该是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 a4-7
在下面的结构中,我觉得大小应该是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的结尾不是对象的结束.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读