内存对齐

首先说一下结构的存储分配基本方法:按照结构体中成员中成员类型字节数最大的为标准,从上往下对结构体成员进行赋值,若当前成员的字节数小于最大成员字节数,接着为下一个连续分配内存,若下一个的内存分配后会大于最大成员字节数,则为当前成员补齐至最大成员字节数的整数倍。
先举几个例子熟悉一下边界对齐的计算方法: 
struct test1 
{
   char b;
   char c;
   int a; 
};

//最大字节数为int 4字节
//首先给b开辟1个字节  1<4
//紧接着给c开辟一个字节 2<4
//因为再给a开辟4个字节 2+4=6 > 4 所以需要在加a开辟前向b多开辟2字节
//所以1+3+4 = 8



这是测试截图:

 

其中用地址间隔证明存储分配:

可以看到a地址和b地址间相差为1,而b地址和d地址相差3,这是因为char a 开辟1个字节,char b开辟了三个字节(1个字节为char类型,2个为对齐边界而多开辟的)int d开辟了4个字节,共8字节

在上述例子中进行了一些变换进行验证:

struct test2 
{
   char b;
   int  d;
   char c;
};

//首先确定最大字节数 : int  4字节
//依次由上至下计算:b开辟了1字节, 1<4
// 继续开辟d ,开辟4字节   ,1+4=5 > 4   因为大于最大成员参数字节且不是其整倍数,所以需要补齐至 
//最大成员参数字节数的最小整倍数,即5 需要补至8 ,而这3个多的字节从char b后开辟
//最后开辟c  开辟1字节,8+1 > 4   因为大于且不为最大成员参数字节数整倍数,需要进行补齐,9需要补
//至12,多的3个字节从c后开辟    则结构体长度为12

为了验证,贴上测试截图:

结构存储分配(边界对齐)大概就是这样,可以多换几种类型成员进行练习,熟悉分配原则。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值