linux系统下struct大小的计算总结

Fire今天刚学了结构体,听的不是很明白,回来之后找了很多资料,然后自己亲手证明,总结了结构体大小计算的几个结论,如果有问题希望大家给予指点:

linux系统 pragma pack 默认为4

结构体对齐模数是结构体内部最大数据成员长度和pragma pack中的较小者

例如:

    char a[4];

    short c;

    double b;

由于结构体中有double类型8个字节,比linux系统下默认的pragma pack大,所以我们的对齐模数为4;

我自己给上一句话翻译如下:

    公式: len = type > foctor ? focus : type

    len 结构体对齐模数长度

    type    结构体成员类型最大长度

    foctor  对齐因子大小(linux默认4,也就是我们的pragma pack的大小)


    ####以上都是Fire自己取的名字,为了形象、好记

那么下来我就说说我总结的三条规则吧:

1:数据成员对齐规则:

结构体的第一个数据成员要放在offset为0的地址,以后每个数据成员存储的起始位置都要从该成员大小或者成员的子成员大小(比如数组,结构体等都有子成员)的整数倍开始存放。如果成员大小大于对齐模数,则要按照对齐模数的整数倍开始存放

例如1:

    char a; 

    short c;

    double b;

对齐因子为4,char存放在0位置;short存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值