结构体、位段(位域)详解
结构体大小前边简单介绍了一下,现在对计算结构体的大小进行详细的解释,希望能帮助大家更好的理解结构体和位段。
举个例子:
struct
{double a;//8 8 8 0-7 char b;//1 8 1 8 8-11浪费int c;//4 8 4 12-15int d;//4 8 4 16-19 20-24浪费
}S;
解析:(vs下默认对齐数为8,linux下为4,以下环境为vs)
1.结构体中第一个成员a放在0偏移处,a是double类型,占8个字节,对齐数为8,从0偏移处开始往后放,0-7.
2.b占1个字节,对齐数为1(b自身大小为1,默认为8,较小值为1,即对齐数为1),8是1的倍数,所以从8偏移处开始放,8.
3.c占4个字节,对齐数为4,9-11浪费,从12开始放c,12-15.
4.d占4个字节,对齐数为4,16是4的倍数,从16开始放,16-19.
5.0-19是20个字节,最大对齐数为8,8的倍数最小的为24,20-24浪费.
6.因此,该结构体的大小为24.
位段大小的计算,及计算机的存储方式:
举个例子:
struct
{int a : 2;int b : 10;int c : 5;int d : 20;
}S;
注意:
(1)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
