struct的sizeof的大小决定的情况

struct结构体由于包含了不同的数据类型,而数据结构类型之间存在占用空间大小的问题,比如char型占用1字节,short int占用2字节,int、long int、指针、float占用4字节、double占用8字节(windows和linux中)。但计算机系统对基本数据类型可能允许地址做出了限制,要求某种类型的对象必须是2、4或8的倍数(为了简化处理器和存储系统之间的硬件设计——可以节省至少1根地址线)。 

那么对于给出的一个struct类型数据,我们如何判断它占用多少空间呢? 

很简单!我们按照对齐原则即可做出正确判断。但记住:即不是像某些教程说的用struct结构体中占用空间最大的那个变量的字节数乘以变量总数,也不是所有变量占用空间总和,然后补齐到占用最大空间变量所占用字节数的倍数。 

那么,到底如何计算呢? 

举个例子就明白了: 

struct 

  int i; 
  char j; 
  int k; 
  char r; 
  int s; 
}s; 
sizeof s = ? 
答案是20。 

struct 

  int i; 
  char j; 
  char r; 
  int k; 
  int s; 
}s; 
sizeof s = ? 
答案是16。 

struct 

  double i; 
  char j; 
  char r; 
  int k; 
  int s; 
}s; 
sizeof s = ? 
答案是20。 

struct 

  double i; 
  char j; 
  int k; 
  char r; 
  int s; 
}s; 
sizeof s = ? 
答案是24。 

struct 

  double i; 
  char j; 
  short k; 
  char r; 
  short s; 
}s; 
sizeof s = ? 
答案是16。 

看出问题了吗?计算机系统按照struct中除了double外的变量类型中最大占用空间的字节数对齐。所以才有了上述结果。注意char在被int变量隔离开的时候,1个char也占用4字节,但两个char甚至4个char紧挨着存放时则均只占用4个字节(访问char变量按1的倍数访问,这样看来,CPU和存储器之间的地址线也不能减少,因为有可能访问到某地址,其最后一位也是1)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值