C++内存对齐原则

C++内存对齐原则
(1)在没有#pragam pack宏的情况下,struct/class/union内存对齐原则有四个:
  1.      数据成员对齐规则:结构(struct)或联合(union)的数据成员,第一个数据成员放在offset为0的位置,以后每个数据成员存储的起始位置都是放在该数据成员大小的整数倍位置。如在32bit的机器上,int的大小为4,因此int的存储位置都是从4的整数倍的位置开始存储的。
  2. 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部“最宽基本类型成员”的整数倍地址开始存储(struct a里面有struct b,b里面有char、int、double等元素,那b应该从8的整数倍位置开始存储)。
  3. 收尾工作:结果体的总大小,也就是sizeof的结果,必须是其内部最大成员的“最宽基本类型成员”的整数倍,不足时要补齐。(基本类型不包括struct、class、union)
  4. sizeof(union),以结构里面size最大元素为union的size,因为在某一个时刻,union只有一个成员真正存储于该地址。
举例说明一下:
class A
{
     char a;
     int b;
};
class B
{
     char c;
     double d;
};

cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;


上例输出结果为8和16,原因是A的最大数据元素为int,大小为4,补齐之后为1+(3)+4 = 8;B的最大数据元素为double,大小为8,补齐之后为1+(7)+8=16.
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值