为什么数组查询效率高于链表

一般来说数组的查询速度快于链表,原理是什么?

电脑中存在多种不同的存储器,如下表

  • CPU 寄存器 – immediate access (0-1个CPU时钟周期)
  • CPU L1 缓存  – fast access (3个CPU时钟周期)
  • CPU L2 缓存 – slightly slower access (10个CPU时钟周期)
  • 内存 (RAM)   – slow access (100个CPU时钟周期)
  • 硬盘 (file system) – very slow (10,000,000个CPU时钟周期)

各级别的存储器速度差异非常大,CPU寄存器速度是内存速度的100倍! 这就是为什么CPU产商发明了CPU缓存。 而这个CPU缓存,就是数组和链表的区别的关键所在。

CPU缓存会把一片连续的内存空间读入, 因为数组结构是连续的内存地址,所以数组全部或者部分元素被连续存在CPU缓存里面, 平均读取每个元素的时间只要3个CPU时钟周期。   而链表的节点是分散在堆空间里面的,这时候CPU缓存帮不上忙,只能是去读取内存,平均读取时间需要100个CPU时钟周期。 这样算下来,数组访问的速度比链表快33倍! (这里只是介绍概念,具体的数字因CPU而异)

 

其实这里还有一个概念就是操作系统的局部性原理

 

为什么数组查询效率高于链表_第1张图片

 

 

 

 

你可能感兴趣的:(为什么数组查询效率高于链表)