我想询问空间和时间局部性。如果我在一个带有循环变量的循环中说i
并且我遍历一个名为arr[i]
的数组,那么当我访问arr [i]然后根据我来说它应该是时间和空间位置首先,我将访问i
并找出i
是什么,然后转到该索引。我在这做两件事,
i
(时间地点)。arr[i]
(空间位置)。请告诉我这种情况是否正确。
提前谢谢。
答案 0 :(得分:3)
时间地点:事情是在很短的时间内发生的吗?如果是这样,他们有时间局部性。如果没有,他们就没有。
空间位置:在空间中靠近的东西(即记忆)?如果是这样,它们具有空间局部性。如果没有,他们就没有。
请注意,使用这些术语时,您需要指定什么是本地的;孤立地说,它们没什么意义。
arr
的元素(假设通常意味着“数组”的实现,即在连续块中分配的数据元素)具有相对于彼此的空间局部性。您不知道(至少在问题中所述的任何内容)i
相对于arr
的位置,因此您无法说明这些对象是否相对于彼此具有空间局部性或不。
访问i
和arr[i]
的语句一个接一个地发生,因此这些语句表现出时间局部性,假设您对每个数组元素的工作都很便宜;通过这种假设,通过后续迭代引用arr
的不同元素也将表现出时间局部性。但是,如果对于循环的每次迭代,您调用一些在访问i
和arr
之间需要很长时间的函数,那么这些访问将表现出时间局部性将不再是真的。