字节对齐干货

本屌笔试经常被结构大小搞得晕头转向,网络上的资料都是学术性的描述,不太实用,一怒之下自己总结出了一个计算公式,短平快,从此无忧。
结构体(struct)的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。
基本数据类型长度
现在已知32位机器上各种数据类型的长度如下:
char:1(有符号无符号同)
short:2(有符号无符号同)
int:4(有符号无符号同)
long:4(有符号无符号同)
float:4
double(long long):8
字节对齐计算公式:
先找出最大对齐长度N,然后累计每个变量的长度,但是总大小的增加必须是N的最小公倍数
注意:当结构体成员里面有数组成员时,如int a[10],要看成10个整形变量才参与计算。

先看下面定义的两个结构体.
struct
{
char a;
short b;
char c;
}S1;
对于struct S1, a的大小是1,b的大小是2,c 的大小是1,那么S1的最大对齐方式是2。所以S1的步长是2,也就是说每次以2的倍数为分配单元。那么内存预先分配2个字节,可以容纳a,然后a+b=3,3>2,内存必须增长了,那么增长多少呢?增长必须以2的倍数增长,也就是说,为a+b分配的内存必须是2的最小公倍数,那么对于a+b=3来说,2的最小公倍数就是4,也就是说必须为a+b分配4个字节才能放下,所以a+b&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值