struct字节对齐+柔性数组问题

本文介绍了C语言结构体中的字节对齐规则,包括成员变量的偏移量必须为该成员大小的整数倍以及结构体总大小必须为最宽成员的整数倍。此外,文章还探讨了柔性数组的概念及其在Redis源码中的应用,指出其在构造不定长数据包和节省内存方面的优势,并提到通过p->array[-1]可以访问到柔性数组的长度字段。
摘要由CSDN通过智能技术生成

前几天在看redis源码的sds数组,大量的柔性数组应用,array[-1]等等刷新了认知,决定记下来。

1.字节对齐问题

http://blog.sina.com.cn/s/blog_7cfc0d130102vrq8.html这里面有大量的例子,不赘述。

原则有二,第一,各成员变量的偏移量(就是前面的成员加起来占了多少个字节),必须为该成员大小的整数倍。(char1字节,short 2字节,int 4字节,double 8字节),否则在上一个变量后填充字节数

   struct X

   {

           char a; //自身1个字节              +3 = 4个字节

           char* b; //char给的的偏移量只有1个字节,可是指针自身4个字节,不行不是整数倍,b说要给a加三个字节  (1+3)  +  4 = 8

           double c; //偏移量有8个字节,自身8个字节,完美。      8+8  =  16

    }S1;

    综上,sizeof(s1) = 16;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值