标签:
在程序中,程序倾向于引用邻近于其他最近引用过的数据项的数据项,或者就是最近引用的数据项本身,这种倾向,称为局部性原理。打个比方,在如下一个二维数组的循环中,循环1的局部性就比循环2的更优秀。
/*有良好局部性的程序*/
int loop1( int array[M][N] ){ int i = 0,j = 0,sum = 0; for( i = 0;i < M;i++ ){ for( j = 0;j < N;j++ ) sum += a[i][j]; return sum; }
/*局部性很差的程序*/
int loop2( int array[M][N] ){ int i = 0,j = 0,sum = 0; for( i = 0;i < M;i++ ){ for( j = 0;j < N;j++ ) sum += a[j][i]; return sum; }
程序局部性可以总结为以下:
随着CPU与主存之间的速度差距不见增加,故而早期的系统设计者被迫在CPU寄存器和主存之间插入了一个小的SRAM告诉缓存存储器。而后来随着系统内部各存储器结构之间速度差距的不断增大,缓存这项技术也被用到了各存储器结构之间,比如磁盘和内存。
缓存是为了减少各存储器层次结构之间的速度差异而存在的,其作用就是在访问更低级的存储器结构的时候,直接低层次存储器结构的一个较大的块存放到缓存存储器中。这样,下次要访问之前数据的邻近数据时,就能快速得从缓存存储器中得到数据。要编写局部性良好的程序也是基于这个原因。
标签:
原文地址:http://www.cnblogs.com/listenfwind/p/5862547.html