顺序表之高速缓存命中率

序言

本篇博客主要讨论的是顺序表以及双向循环链表的一些比较
但是两个结构都是相辅相成的

链表

优点:
1,任意位置插入删除数据效率高
2,按需申请释放开辟内存
缺点:
不支持下标的随机访问,不支持一些算法,如二分,排序等

顺序表

缺点
1.由于空间是连续的,空间不够是需要扩容,扩容本身存在一定消耗,且有事会有大量空间浪费
2.头部或者中间的插入删除数据时效率教低
优点
1,物理空间是连续的,方便用下表随机访问
2.CPU高速缓存命中率更高
这篇短篇博客主要想讲的是这个。
在这里插入图片描述
我们先看一张图
在这里插入图片描述
编译链接生成后,生成一个可执行程序,CPU要去访问内存,这个时候假设有两个程序,分别是双向循环链表的打印以及顺序表的打印

在这里插入图片描述
在这里插入图片描述

CPU要去内存中拿它们,虽然内存很快,但那是相对于硬盘而言的,相对于CPU的话,内存的速度是很慢的,所以为了方便CPU,所以有了三级缓存和寄存器,这两个是同一个等级的,但是寄存器稍微比三级缓存快点
因此

CPU不会直接访问内存,因为它嫌弃内存速度太慢了,会把数据加载到三级缓存或寄存器
4或8byte小数据放到寄存器
较大数据就到三级缓存
在这里插入图片描述
所以,因此加入有这两串数字,一个是数组,还有一个是链表,
CPU会先看数据是否在缓存,(主要是看三级缓存中是否有数据)在就叫命中,直接访问,不在就叫不命中,得先把数据加载到缓存,再访问。

因此,如果都是从头开始遍历数据的话,缓存中肯定是没有数据的,要从头开始加载,加载时有局部性原理的,不会一byte一byte的加载会是一连串一连串的空间加载。打个比方,数组只需要加载一次就可以全部命中,但是由于链表的空间不是连续的,加载一次或者是更多次都不一定会加载完,所以这样比较的话顺序表的CPU缓存命中率高。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天少点debug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值