内存对齐

内存对齐

内存对齐的原则

结构体成员按自身数据类型的对齐系数进行对齐:第一个结构体成员放在 offset(偏移量)为 0 的地方,后续每个成员的起始地址要从该成员大小的整数倍开始。

结构体中成员为其他结构体,则结构体成员要按自身结构体内部的最大对齐值(成员中的数据类型所占空间值最大的那个)进行对齐:比如 struct A 中包含 struct B 类型的成员,B 中有 char、int、double 元素,那么 B 应该从 sizeof(double) 的整数倍开始存储。

结构体的自身对齐值是其成员中自身对齐值最大的那个值:即:结构体的总大小必须是其内部最大成员的整数倍,不足的要补齐。

使用 pragma 宏指令修改对齐系数
对齐系数是可以改变的,通过预处理器指令 #pragma pack(n),n=1,2,4,8,16 来自定义对齐系数,通过 #pragma pack(),来取消自定义对齐系数。

宏定义 pragma pack(value) 的 value 就是指定的对齐值,通常 value 的值取 2 的较小次方。

如果 value 的值小于变量类型的对齐值,则按照 value 的值进行对齐。
如果 value 的值大于变量类型的对齐值,则按照原来的对齐值进行对齐。
简而言之,使用该宏的时候,按照 value 值和原来对齐值之间较小的值进行对齐。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值