C语言内存对齐的原理及内存计算方法详解

内存对齐的原理

由于CPU在读取和计算数据时,需要根据CPU和操作系统的位数来一次性读取一定大小的数据。目前大部分CPU都支持64位,操作系统大部分都使用32位或64位,我们以64位操作系统为例进行说明。64位CPU和操作系统一次可以处理8字节数据,对于一个结构体如果结构体中的数据大小为8个字节,本来CPU可以一次读取完毕,由于读取的地址在结构体中可能不是从首地址开始的,这就会导致这个8位数据被CPU读取了两次才读取完毕,很明显这样的CPU工作效率近乎降低了一半,为了改善这种情况,引入了内存对齐机制,用来提高CPU的工作效率和减少对内存的浪费。

结构体内存大小计算方法

方法:
1.首先找到结构体中占用字节数最大的类型(X个字节)。那么我们将以X字节数大小为单位来进行计算。想象出一个矩阵,每一行有X个字节,共有多行。
2.将第一个类型字节占用情况放到X的首位。将第二个类型字节数接着放入行中,前面的总长度应为自己长度的倍数,从而来平移当前字节数的位置。
3.以此类推来放置字节,当需要放置的类型已经无法放入该行,则从第二行开始放置。假设放置了N行。
4.最终我们计算出占用字节长度为X*N。

我们对3道例题进行分析
例1:struct {
char a;
short b;
short c;
char d;
char e;
char f;
}
1.最大类型为short为2字节,所以每行有2个字节大小。
2.char a占用第一行的首字节,剩余1字节。
3.short b占用2字节,第一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值