深入理解计算机系统——结构体的内存对齐

看下面一个例子:

它的内存模型大致如下 :

这里写图片描述

我们稍微分析一下 :

a起始地址为0 ,满足内存对齐原则,最少占用4个字节。
b起始地址为4 ,满足内存对齐原则,最少占用4个字节。
c起始地址为8 ,满足内存对齐原则, 最少占用8个字节。
d起始地址为16,满足内存对齐原则, 最少占用1个字节,但是下一个域e的起始地址必须为sizeof(float) = 4的倍数,因此d占用了4个字节的内存,有3个字节的内存被“浪费”了。
e起始地址为20 ,满足内存对齐原则,最少占用4个字节。
f起始地址为24 ,满足内存对齐原则,最少占用1个字节,但是下一个域g的起始地址必须为sizeof(long long) = 8的倍数,因此f占用8个字节的内存,有7个字节的内存被“浪费”了。
g起始地址为32,满足内存对齐原则,最少占用8个字节。
h起始地址为40,满足内存对齐原则,最少占用4个字节,但是为了满足8字节对齐原则(因为整个结构体中单个域占用的最大内存为8),因此h会占用8个字节,有4个字节的内存被“浪费”了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值