结构体的存储分配问题

边界对齐要求

struct ALIGN
{
    char a;
    int b;
    char c;
};

那么这样的结构将会花费12个字节(因为int 类型是占用了个字节的,char类型占用个字节,所以边界对齐原则,需要12个字节)
但是我们实际用的是个字节的大小,这样的话我们的存储利用率是比较低的.

所以我们的改进方法就是调整结构声明的顺序就可以了,让那些对边界要求最严格的成员首次出现对边界要求最弱的成员最后出现.这种方式能够最大限度的减少因边界对齐而带来的空间损失.

一些关于空间的操作符

sizeof操作符能够得出一个结构的整体长度,包括因边界对齐而跳过的那些字节.
如果需要确定某个成员的实际位置,应该考虑边界对齐因素,可以使用offsetof宏(定义于stddef.h

offsetof( type, member )

type 是结构的类型,member 是你需要的那个成员名.表达式的结果就是一个size_t值,表示这个指定成员开始存储的位置距离结构开始存储的位置偏移几个字节.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值