c++结构体对齐问题

今天在复习c++基础知识时,发现了一个c++结构体对齐问题,怎么算一个结构体所占的位数,我得出了一个技巧。

#include <iostream>
using namespace std;
typedef struct example1{
     char a;
     int b;
     short c;
     double d;
}example1;
typedef struct example2{
      char a;
      short b;
       int c;
       double d;
}example2;
int main()
{
	example1 example1;
	example2 example2;
	cout<<sizeof(example1)<<" "<<sizeof(example2)<<endl;
	return 1;
}

怎么求结构体example1和example2所占的位数,这里有一个规律,就是结构体所占的位数必然是结构体内占用位数最多的成员所占位数的倍数。

结构体example1和example2中占用位数最多的成员的是double类型,在32位机子上占8个字节。故结构体所占位数可能是8,16,24,32.等等。

怎么分析,下面先分析example1:

1 假设example1只有前面char 和int两个类型成员,char 占用1个字节,int占4个字节,int类型占用字节还是最多,不考虑对齐问题,example1占用1+4=5个字节,考虑对齐问题,example1占4的最小倍数4+4=8个字节

2 现在example1加上short c成员,int类型占用字节还是最多,不考虑对齐问题,example1占用8+1=9,考虑对齐问题,example1占4的最小倍数8+4=12个字节

3现在example1加上double d成员,double类型占用字节最多,不考虑对齐问题,example1占用12+8=20,考虑对齐问题,example1占8的最小倍数12+8+4=24个字节

同理分析example2

1 假设example2只有前面char 和short两个类型成员,char 占用1个字节,short占2个字节,short类型占用字节还是最多,不考虑对齐问题,example1占用1+2=3个字节,考虑对齐问题,example1占2的最小倍数2+2=4个字节

2 现在example1加上int c成员,int类型占用字节还是最多,不考虑对齐问题,example1占用4+4=8,考虑对齐问题,example1占4的最小倍数4+4=8个字节

3 现在example1加上double d成员,double类型占用字节最多,不考虑对齐问题,example1占用8+8=16,考虑对齐问题,example1占8的最小倍数8+8=16个字节

故程序运行的结果为24,16


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值