[CA-1]存储器[Caches]
一个类比
就像图书馆找书一样,我们花费很长的时间寻找对应的标签,然后来回走遍这个栈寻找我们想要的书。内存也有同样的问题,并且会在增加存储密度时,减慢储存每个bit的时间,最终会导致处理器与内存处理速度相差巨大
内存等级制度(Memory Hierarchy)
通俗地讲就是离处理器物理意义上越远,处理越慢,等级越低
就像我们在图书馆中找书写报告时那样,我们会先找到相关书籍,放在桌上,然后开始写,写到中途可能会继续找书放在桌上,但是可能只有其中的几本书对写报告有帮助,实际上计算机也是这样的,下图中每当一个地址被访问时,就会打一个点
Locality
Locality分为两种
像上图中的横线就是temporal locality,而密密麻麻的部分就是spatial locality
常见结构在内存中的访问形式
一个很大的问题(pointer chasing)
我们比较喜欢的很多数据结构比如树,链表等等都对locality有很大的损害,因为指针的地址是一个与之前物理意义上完全不相关的地址(no spacial reuse),并且如果我们不对指针进行追踪的话,我们也无法在接下来连续访问它(no temporal reuse)
这也解释了为什么现代的语言中如go就有slice和map,前者为了跟简单地append,后者为了减少pointer chasing(因为有哈希table)
Memory Hierarchy
Memory Access without Cache
这里面有些东西有些超纲,不过我会在之后补充
Memory Access with Cache
End
Cache的内容比较长,一次性讲不完,我会留到下章