结构体内存对齐

看了一些内存对齐的文章后,自己做的一个小笔记。


内存对齐注意点:

1.确定对齐模数:结构体变量类型,所占字节最多的

2.对齐时,注意存储变量的首地址要能被变量类型所占字节数整除

3.结构体最后的大小要是对齐模数的整数倍


例子1:

struct a

{

char c;

int b;

};

结构体大小为 :1 + 3 + 4  = 8;

由于int 的地址为1,不能被4整除,故c填充3个字节(起始地址为0)


例子2:

struct  a

{

int b;

char c;

};

结构体大小为: 4 + 1 +3 = 8;

由于b+c共5个字节,为了能被对齐模数整除,c后面填充3个字节


例:子3:

struct  a

{

char b;

short c;

int d;

};

结构体大小:1 + 1 + 2  + 4 = 8;

由于short的地址为1,且sizeof(short) = 2;  不能被2整除,故b后面填充一个地址


例子4:

struct  a

{

char b;

char c;

short d;

int e;

};

结构体大小:1 + 1 + 2 +4 =8;


例子5:

struct a

{

char b;

short c;

char d;

int e;

};

结构体大小: 1 + 1 + 2 +1 +3 + 4 = 12

由于c 的地址为1,故b填充1个字节,由于e的地址为5,故d后填充3个字节


例子6:

struct b

{

short c;

struct a d;          //a为例子5结构体

};

结构体大小:2 + 2 + 12 =16

由于sizeof(c) = 2;结构体a 的对齐模数是4,且d的地址为2,故c后填充2个字节






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值