高速缓存

高速缓存

程序访问的局部性

最早期的计算机,在执行一段程序时,都是把硬盘中的数据加载到内存,然后 CPU 从内存中取出代码和数据执行,在把计算结果写入内存,最终输出结果。随着程序运行越来越多,就发现一个规律:内存中某个地址被访问后,短时间内还有可能继续访问这块地址。内存中的某个地址被访问后,它相邻的内存单元被访问的概率也很大。

人们发现的这种规律被称为程序访问的局部性。程序访问的局部性包含 2 种:

  • 时间局部性:某个内存单元在较短时间内很可能被再次访问

  • 空间局部性:某个内存单元被访问后相邻的内存单元较短时间内很可能被访问

出现这种情况的原因很简单,因为程序是指令和数据组成的,指令在内存中按顺序存放且地址连续,如果运行一段循环程序或调用一个方法,又或者再程序中遍历一个数组,都有可能符合上面提到的局部性原理。那既然在执行程序时,内存的某些单元很可能会经常的访问或写入,那可否在 CPU 和内存之间,加一个缓存,CPU 在访问数据时,先看一下缓存中是否存在,如果有直接就读取缓存中的数据即可。如果缓存中不存在,再从内存中读取数据。

事实证明利用这种方式,程序的运行效率会提高 90%以上,这个缓存也叫做高速缓存 Cache。

链接