空间和时间局部性描述了程序如何访问数据(或指令)的两个不同特征。
定义:
- 如果在时间上被引用的事物在空间上也接近(相邻的存储器地址,磁盘上的邻近扇区等),则引用序列被认为具有空间局部性(Spatial Locality)。
- 如果对同一事物的访问在时间上聚集在一起,则该序列被称为具有时间局部性(Temporal Locality)。
通俗而言:
- 时间局部性就是被引用过一次的存储器位置在未来会被多次引用(通常在循环中)
- 空间局部性就是如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
举例
Example of computing the sum of an array:
在上述代码中,
- sum为时间局限性Temporal Locality,因为sum被引用了多次。
- 数组元素为空间局限性spatial Locality,因为如果a[i]被使用,则a[i+1],a[i-1]…很可能被引用。
练习
时间局限性和空间局部性的意义分别为( )。
A.最近被访问的单元,很可能在不久的将来还要被访问
B.最近被访问的单元,很可能它附近的单元也即将被访问
C.结构化程序设计,很少出现转移语句
D.程序中循环语句的执行一般时间很长
答案:
A是时间局域性,B是空间局域性。C、D有可能正确,但并不是时空局域性的根本定义,或者说,C和D是造成时空局域性的原因,而不是时空局域性的意义。