存储结构层次
不说废话,先来看一张图
计算机的存储器层次结构是为了满足不同需求而设计的。在存储层次结构中,从上到下,存储介质的访问速度越来越慢,价格越来越低,但存储容量越来越大。这个层次结构通常包括CPU寄存器、高速缓存、主存储器、磁盘缓存、固定磁盘和可移动存储介质等。
总体来说,读写速度更快的介质,价格更高,制造工艺要求更高,反之。高速缓存比主存大约快10倍,主存比硬盘大约快5万倍,所以cup取数据尽量要在高一层的存储设备中取,尽量避免在低一层的存储设备中取,这是缓存设计的基本思想。
缓存
缓存是一个更小更快的设备,它作为更大更慢设备的缓冲区。存储层次结构中的高层存储设备都作为其低一层的存储设备的缓存,比如L0是L1的缓存,L1是L2的缓存,L2是L3的缓存,L3是主存的缓存等等。
且方便读取,缓存会被划分为若干个块,块的大小也随级别的高低而调整。根据存储结构层次图可知,缓存只能是逐层的。
缓存命中
缓存命中即上层介质通过属于它的缓存读取下层介质中的数据的操作。举例:当L2缓存读取内存中的数据时,首先需要通过L3缓存尝试命中数据,此时会有两种情况:
1.缓存命中
当L3缓存中刚好有此数据,则将数据读取到L2中,缓存命中
2.缓存不命中
当L3缓存中没有此数据,CPU则会执行指令使L3到内存中读取数据到L3当中。这里还有一个情况,就是L3缓存满了,L3则会覆盖部分数据,覆盖方式这里不展开讨论。
局部性原理
局部性分为:时间局部性和空间局部性。如果一个内存位置被重复的引用,那就是有了时间局部性,如果一个内存位置被引用了,很快这个位置的附近位置也被引用了,这就有了空间局部性。
根据以上对缓存命中概念的理解可知:当多次访问多个变量时,如果变量在内存中顺序一致,则很大可能会被上层缓存加载到一个块中,则会大大提升缓存命中率。如果顺序不一致,则会降低缓存命中率,使上层缓存多次进行复制覆盖的操作,降低运行效率。
总结
作为一个优秀的程序员,一定要理解局部性原理,学会重复使用已用过的数据,或者使用已用过数据的邻近数据,也就是说,程序常常会使用集中在一起的局部数据