顺序表与链表比较&&存储体系结构

顺序表与链表对比

链表

优点

1.任意位置插入删除O(1)

2.按需申请内存

缺点

1.不支持下标随机访问

2.cpu高速缓存命中率比较低

---------------------------------------------------------------------------------------------------------------------------------

顺序表

缺点

1.头部或者中部的插入删除会浪费大量空间

2.空间不够需要扩容

a.扩容是有代价的(尤其是realloc异地扩容)

b.往往伴随着空间浪费

优点

1.尾插尾删效率不错

2.支持下标随机访问

3.cpu高速缓存命中率比较高

缓存利用率参考存储体系结构 以及 局部原理性

 电脑上的存储设备

寄存器(集成到cpu),高速缓存,内存,硬盘······

早期cpu处理数据是从内存中拿的,但是由于cpu的发展,cpu访问数据的速度越来越快,内存的读写速度已经跟不上了,就出现了高速缓存和寄存器这样的概念

以后cpu处理数据从寄存器中拿,即寄存器中没有便会从高速缓存中拿数据,依次类推

但是寄存器通常是比较小的,因此cpu访问少量数据的话内存中的数据是往寄存器加载的,访问大量数据内存中的数据是往高速缓存中加载的

这就引出了两个概念~

缓存命中:cpu从缓存访问特定数据,若数据已经在缓存中,就叫缓存命中

缓存不命中:cpu从缓存访问特定数据,若数据不在缓存中,就叫缓存未命中,数据会加载到缓存中,再进行访问

而加载数据通常是加载一段的(一般为cpu的字长)

若要访问的数据是以数组的形式存储的,由于数组的元素存储是连续的,这时加载一段,基本就会把数组的数据都加载到缓存中,因此缓存命中率比较高

若要访问的数据是以链表的形式存储的,由于链表的节点地址是随机的,这时加载一段,后面的节点大概率不会加载到缓存中,因此缓存不命中率较高,当然还会有另外一个问题---缓存污染,因为加载一段,当前节点后面的数据往往不是我想要的,但是会加载进高速缓存,若高速缓存满了,还可能会把我要访问的数据挤出去,因此造成缓存污染

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值