转自:https://blog.csdn.net/u013315650/article/details/56347793
知乎 https://www.zhihu.com/question/25142664/answer/154497286
1.时间局部性和空间局部性
在CPU访问寄存器时,无论是存取数据抑或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。
时间局部性(temporal locality)
时间局部性指的是:被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。
空间局部性(spatial locality)
如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
2.例子
int a[N] = {0, 1, 2, 3, 4}; int sum = 0; for (int i = 0; i < 5; ++i) { sum = sum + a[i]; }
- for循环内的指令具有良好的时间局部性,因为被多次使用。
- 对于步长位k的引用程序,步长越小,空间局部性越小。步长为1的引用具有良好的空间局部性。k越大,空间局部性越差。举例:二维数组按行访问比按列访问速度更快,因为前者的空间局部性更好,二维数组是按行存储的。
3.提高局部性
降低不命中率,这个和程序的运行时间相关的。