首页 新闻 会员 周边 捐助

有关结构体内存对齐的问题,大佬帮忙解决一下谢谢

0
悬赏园豆:20 [已解决问题] 解决于 2023-09-20 10:30

在32位cpu上选择缺省对齐的情况下,有如下结构体定义:
struct A {
unsigned a : 19;
unsigned b : 11;
unsigned c : 4;
unsigned d : 29;
char index;
};
int main()
{
cout << sizeof(struct A) << endl;
}

//为什仫输出结果是16字节呢?

4字节 32位 三个4字节可以存放下 71位的数据啊?
4 -> 29
4->19 + 11
4->4 + 8

不是12字节吗?

上心&的主页 上心& | 初学一级 | 园豆:131
提问于:2023-09-19 19:17
< >
分享
最佳答案
0

要按a、b、c、d、index的顺序来进行存储。

  1. 首先 ab占用19+11=30位,由于30+4>32所以不能存放下c,c另外开辟一块4字节的内存,这样ab就占用了4字节
  2. 由于4+29>32,所以c和d也不能存放在一起,d要另外开辟新的4字节内存,这样c占用4字节
  3. 由于index不采用位域,所以d占用4字节,index占用1字节,为了内存对齐,index实际占用4字节
    综上,ab+c+d+index共占用4+4+4+4=16字节
收获园豆:20
aJream | 菜鸟二级 |园豆:222 | 2023-09-19 23:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册