您的位置:首页 > 编程语言 > C语言/C++

C语言结构体对齐小结

2015-01-08 15:09 246 查看
 struct A

{

     int      a;

     char    b;

     short c;
}; 

开辟内存8字节

struct B

{

     char    b;

      int      a;

      short c;

};

开辟内存12字节

struct C

{

     char    b;

      int      a;

      short c;

      double d;

};
开辟内存24字节

A,计算为4+1+补1+2;

B,计算为1+补3+2+补2;

C,计算为1+补3+4+2+补6+8;

个人总结有三种规律,(助记备忘



一、如果前面数据较大,前面数据可不用担心补位,如int a; char b; a是不用补位的。

二、如果后面数据较大,则前面数据必须要计算是否补位,补位规则:假如初始地址为0,到该后面数据的地址为该数据长度的整数倍。

三、结尾时,需要计算是否补位,应补成该结构体长度为最大数据长度的整数倍。

别人总结:

一、结构体变量的首地址能够被其基本类型成员的大小所整除;

二、结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节;

三、结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: