关于计算结构体大小的内存补齐规则(个人愚见)

本人愚昧,对于其他人说的规则表示不理解,可能是理解不到位,固自己测试了番。

//后面表示sizeof目前变量 的strucat大小;

struct s1{

           

         chara;               //1

         shortb;             //2+2

         intc;                            //2+2+4

         //8

         intd;                  //4

         chara1;             //1

         shorte;             //2(1+1)+2

         //16

 

         charac;             //1+7

         //24

         intai;                 //4(1+3)+4  没有最终填充

         //24

 

         characc;           //1+7

         //32

 

         __int64f;          //8

//40


};

 

 

 

 

struct s1{

        

          __int64f; //8

//8

         chara;                                  //1

         shortb;                                //2+2

         intc;                                               //2+2+4

         //16

         charcc;                                //1+7

         //24

         intccc;                                 //1+3+4   cc要先与ccc对齐,所以cc先补充3

         //24

         shortss;                              //2 新的

  //32

         charc1;                                //2+1+5

         //32

         charc2,c3,c4;                    //2+1+3+2

         //32

 

         charc5,c6;                          //2+1+3+2(非填充)

         //32

 

         charc7;                                //1+7

         //40


};

 

 

 

规律,以结构体中变量最大的对齐。在最终时补充。结果为8的倍数。

子补充,当前面是char,后面是int ,则char要对齐int 补充3字节。

 

又如:当前面char,后面是short,char 要对齐补充short补充1字节

后面没了就对齐(本例__int64  8字节)补充4;

若short后再来个char,后面没了,这char对齐最大的变量(本例__int64  8字节)

Char对齐8,根据前面的char,short已占4字节,后char 要补齐8只需填充3;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值