赞
踩
时间复杂度为O(1)
高
时间复杂度为O(N)
时间复杂度为O(1)
低
计算机的存储分为内储存器和外存储器。
内储存器:寄存器,三级缓存(L1,L2,L3),主存(内存)
外存储器:硬盘
高速缓存的作用:解决CPU和内存速度不匹配
我们编写了一段代码(.c),需要进行 预编译,编译,汇编,链接,才能变成可执行文件(.exe)。
编译:高级语言(我们写的代码语句)变为汇编代码
在汇编的过程中汇编代码又变成机器码(机器语言),也就是我们说的指令
指令会将内存的数据传输到寄存器或缓存中,最后写入内存
寄存器:速度最快,存储小,一个寄存器一般能存4Byte或8Byte的数据
如:a+b
数据较小,指令就会将a和b放到寄存器里,在寄存器里进行运算,最后写入内存
我们分别遍历一遍顺序表和链表
0x110b2311
0x11220b22
现在就体现出CPU高速缓存缓存命中率
这个概念了
CPU会看这数据1的内存地址是否在缓存中
第一次都是未命中
第二次,由于空间局部性原理(下一次访问该地址的附近地址)
所以结果是:顺序表除了第一次未命中,后面几次都命中。链表第一次未命中,其他几次几乎都不会命中
链表还会造成缓存污染。
缓存污染是指操作系统将不常用的数据从内存移到缓存,降低了缓存效率的现象。
就按我们刚才的例子,分别遍历顺序表和链表
顺序表只有1次未命中,链表几乎5次未命中
假设一次加载20Byte数据到缓存(具体多少取决于CPU)
我们遍历的数据就5个int整形,1个int整形占4Byte,一共20Byte。
顺序表在缓存里只用了20Byte,链表用了100Byte,所以链表浪费80Byte的缓存空间,然而缓存空间也是有限的,满了的话就需要把近期未访问的数据给移出去
经过这么多对比,可以发现顺序表和链表就是互补的存在,两个都有存在的意义和自己擅长的领域。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。