关于结构体内存对齐的问题

在学习结构体的时候,遇到一个问题就是关于计算结构体所占内存的大小问题,书上说的是结构体的内存大小为其成员的大小之和,但是自己在电脑上编译时却与书上的理论知识大相径庭,我们来看一看这个问题:按照理论上来说其大小应该为13,但是编译结果为16,为什么多了呢?我们来输出其成员地址来看一看其内存分配的问题:


观察其地址可以看出a和b之间多了三个字节的“空洞”,刚好解释了这个问题,查阅相关资料可知这是计算机为了保证计算机的高效性而做出的空间上的牺牲,浪费一定的空间换取高效率,其计算的基本原则是要保证其内存为4或8的倍数,我们再看看另一个声明:


加上了一个char的成员其内存大小依然为16,我们改变char的顺序再看一看:


从上面两个输出结果看出,相同的成员顺序安排的不同从而系统为其分配的内存也不同,所以可以从这个角度来看合理安排顺序可以一定程度的节约内存。所以在以后计算结构体的内存时遵循这样的原则:

1)char可以插入在任意地址,而int的地址必须为四的倍数;

2)结构体整个的内存为4或8的倍数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值