关于struct结构中字节对齐问题

默认对齐方式:         struct   name1           {            char     str;         占用空间:2个字节           short   x;             占用空间:2个字节           int       num;         占用空间:4个字节            double   xx;         占用空间:8个字节           };          struct   name2     {            char   str;       占用空间:4个字节            int   num;       占用空间:4个字节            short   x;       占用空间:8个字节    (其实开始是2个字节,只是总字节数要是sizeof(double)的倍数)        double   xx;   占用空间:8个字节     };     struct   name1=16个字节                     struct   name2=24个字节   这是什么原因呢?  这是编译时对齐的缘故。所要说明的是,32位机器,默认对齐是按照结构中占用空间最大的数据类型进行对齐 ,    对于结构体中的某一成员item,它相对于结构首地址的实际字节对齐数目X应该满足     以下规则:     X   =   min(n,   sizeof(item))。   n   是编译器设定的最大对齐边界数。      如果n   =   8   .          struct   name1           {     char     str;  偏移为0   ,从第一个字节位置存储,占1个字节                                        short   x;             偏移为2   ,   从第三个字节位置开始存储,占2个字节                                                          int       num;         偏移为4,   由于前两个占了4个字节,所以从第五个字节开始存储。占4个字节                                                       double   xx;         偏移为8,由于前两个占了8个字节,所以从第9个字节开始存储。占8个字节               };     一共占16个字节。     struct   name2     {           char   str;   偏移为0   ,从第一个字节位置存储,占1个字节                                                 int   num;     偏移为4,   由于前两个占了1个字节,所以从第五个字节开始存储。占4个字                                                  short   x;     偏移为2   ,由于前两个占了8个字节   从第九个字节位置开始存储,占2个字节                                               double   xx;偏移为8,由于前两个占了10个字节,所以从第17个字节开始存储。占8个字节         };     一共占24个字节
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值