题目_C_结构体内存对齐

问题:求出32bit环境下,以下机构体所占字节数

 

答案:16字节

 

分析:

       运行测试:

      

       在分析这个问题之前,我们先记住关于结构体内存对齐的三条原则:

1_结构体变量的起始地址能够被其最宽的成员大小整除。

2_结构体每个成员相对于起始地址的偏移能够被其自身大小整除,如果不能则在前一个成员后面补充字节

3_结构体总体大小能够被最宽的成员的大小整除,如不能则在后面补充字节。

分析这个问题我们就不考虑编译器可以指定对齐大小的情况了。在32bit环境中,一般默认的对齐大小是4字节.

https://mmbiz.qpic.cn/mmbiz_png/PnO7BjBKUz9nyBlKs5DXDj1icDo66lk8AHkBzicUW2BdIG6uqZORoASZlrgI4iaAoTRWYSWYm5mf6ACFYSADwwaXQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

Char-1字节 short-2字节 char-4字节,结构体变量首地址0x95fa140可以被最宽成员整除.符合规则1

紧接着应该是b,0x95fa141,但是是不能被short类型大小-2字节整除,于是填补空白字节,到0x95fa142.成员c 和成员 d同理, 成员e后填充变量是由于需要原则3需要被4整除,于是填充到0x95fa14c,于是是16字节

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值