当我们谈论数据结构(如数组)时,我们是指数据如何存储在RAM(连续的内存位置)或硬盘中?如果它也指硬盘,那么物理实现与RAM有何不同?
答案 0 :(得分:0)
我们更喜欢连续的内存位置。如果我们看一下硬件级别,原因就变得很明显了。
CPU 不直接与 RAM 互动,而是通过CPU caches
进行互动(通常分为L1
等级别,L2
,L3
等,L1
最小,最快。每当 CPU 想要一些数据时,它就会向L1
发送请求,如果找不到,L1
会将请求委托给L2
,依此类推(直到硬盘)为如下图所示:
现在,当在任何缓存中找不到数据时,我们将其称为缓存未命中。为了减少缓存未命中,当 CPU 想要访问地址{{ 1}}在 RAM 中,它不仅会在地址x
处获取数据,还会在地址x
附近获取数据(参见下图)。因为我们假设"如果在特定时间引用了特定的内存位置,那么很可能在不久的将来引用附近的内存位置(又名引用位置)。
访问数组元素可确保顺序数据访问,从而确保最小缓存未命中。您现在可以想象出为什么数组比随机/顺序数据访问方面的链接列表等数据结构快得多。同样,过程也适用于其他数据结构。