内存对齐对性能的影响

2 篇文章 0 订阅
2 篇文章 0 订阅

内存对齐对性能的影响

CPU读取内存的方式

CPU读取内存的方式其实非常复杂,为了更进一步的了解相关的原理,需要对计算机组成原理进行深度学习。

Memory access granularity(内存读取粒度)

However, your computer’s processor does not read from and write to memory in byte-sized chunks. Instead, it accesses memory in two-, four-, eight- 16- or even 32-byte chunks. We’ll call the size in which a processor accesses memory its memory access granularity.

CPU把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此CPU在读取内存时是一块一块进行读取的。块大小成为memory access granularity(粒度) 本人把它翻译为“内存读取粒度” 。

https://www.cnblogs.com/feng9exe/p/10059543.html ”内存对齐“

内存对齐举例

假设此计算机的内存读取粒度是4。

如果内存对齐时

前提知识:

1 Byte = 8bit

1 int8 占用 1 Byte

1 int16 占用 2 Byte

1 int32 占用 4 Byte

//一个结构体的定义如下
struct S
{
    int8 a;
    int32 b;
}
0123456789101112131415
int8 aint32 bint32 bint32 bint32 b

我们可以发现int8 a储存在0号内存上,占用1个Byte,1-3号内存空下了3个Byte。int32 b储存在了4-7号内存,一共4个Byte。

由于此计算机的内存读取粒度时是4

当需要读取a(0号内存)时,计算机会读取0-3号一组内存,然后去掉1-3号内存。访问次数1次。

当需要读取b(4-7号内存时),计算机会读取4-7号内存,访问次数1次。

如果内存没有对齐时

0123456789101112131415
int8 aint32 bint32 bint32 bint32 b

我们可以发现int8 a储存在0号内存上,占用了1个Byte。int32 b储存在1-4号内存上,一共4个Byte。

由于此计算机的内存读取粒度时是4

当需要读取a(0号内存)时,计算机会读取0-3号一组内存,然后去掉1-3号内存。访问次数1次。

当需要读取b(1-4号内存)时,计算机会先读取0-3号一组内存,去掉0号内存,再读取4-7号一组内存,去掉5-7号内存,随后再拼接1-3号内存和4号内存组成完整的b。访问次数2次。

内存对齐的目的

合理的内存对齐可以高效的利用硬件性能,减少处理器内存访问次数。

相关链接

https://www.bilibili.com/video/BV1Vt4y1m7DP?from=search&seid=13964421962700904405&spm_id_from=333.337.0.0 “内存对齐”

https://www.bilibili.com/video/BV1v64y1X7YP?spm_id_from=333.999.0.0 “内存对齐对程序性能的影响”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值