首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

它的字节长度为何是16呢

2013-09-15 
它的字节长度为什么是16呢?struct data1{unsigned char i: 2unsigned char j: 2unsigned char kunsigne

它的字节长度为什么是16呢?
struct data1
{
unsigned char i: 2;
unsigned char j: 2;
unsigned char k;
unsigned char buf[3];
unsigned int  m;
unsigned int  n;
};
上面的这个字节长度为什么是16呢?不是应该两个位变量算一个字节+sizeof(k)+sizeof(buf)+sizeof(m)+sizeof(n)=13byte吗?通过在VC++下面观察发现编译器在最后面加了三个字节的0x00,为什么呢? sizeof struct
[解决办法]
就是字节对齐的原因,规则如下:
请牢记以下3条原则:(在没有#pragma pack宏的情况下,务必看完最后一行)
 
1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。
 
2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)
 
3:收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐.

热点排行
Bad Request.