具有位域的struct的大小

时间:2012-08-13 09:49:51

标签: c struct

    static struct{
            unsigned a:5;
            unsigned b:5;
            unsigned c:5;
            unsigned d:5;
    }v={1,2,3,4};

    printf("%d %d %d %d %d",v.a,v.b,v.c,v.d,sizeof(v));

输出是:1 2 3 4 4

有人可以解释为什么这个结构4的大小?不应该是16岁吗?

2 个答案:

答案 0 :(得分:10)

你正在使用20位,恰好适合4个字节。不需要16个字节。

修改

我认为它实际上是必需的,它们就像那样包装:

  

6.7.2.1

     

实现可以分配任何可寻址的存储单元   足以举行一场比赛。如果剩余足够的空间,那就是一个小小的领域   紧跟在结构中的另一个位字段将被打包   进入相同单位的相邻位

答案 1 :(得分:6)

Bitfields打包这个位,所以你的20位很适合32位int,而不是四种不同的int。