今天看文章学到了一个知识点记录一下 CPU缓存对数组友好而对链表不友好 “ 数组简单易用,在实现上使用的是连续的内存空间,可以借助CPU的缓存机制,预读数组中的数据,所以访问效率越高。而链表在内存中并不是连续存储,所以对CPU缓存不友好,没有办法预读。” 原因:CPU读取内存的时候,会把一片连续的内存块读取出来,然后放到缓存中。因为数组结构是连续的内存地址,所以数组全部或者部分元素被连续存在CPU缓存里面,cpu读取缓存里面的每个元素的时间平均只要3个CPU时钟周期。而链表的节点是分散在堆空间(内存)里面的,cpu需要去读取内存,平均读取时间需要100个CPU时钟周期。 所以cpu访问数组比链表快了大约33倍!(这是理论上而言)