1

我想问一下时空局部性。如果我在一个带有循环变量的循环中,并且我正在遍历一个名为 的数组,那么当我访问 arr[i] 时,根据我的说法,它应该是时间和空间局部性,因为首先我会访问并找出什么是和然后转到该索引。我在这里做两件事,i arr[i]ii

  1. 访问i(时间局部性)。
  2. 访问地址arr[i](空间位置)。

请告诉我我对这种特定情况是否正确。
提前致谢。

4

1 回答 1

3

时间局部性:事情是否在短时间内发生?如果是这样,它们具有时间局部性。如果没有,他们不会。

空间局部性:事物在空间中是否靠近在一起(即内存)?如果是这样,它们就具有空间局部性。如果没有,他们不会。

请注意,使用这些术语时,您需要指定什么是本地的;孤立地看,它们没有什么意义。

will的元素arr(假设通常意味着“数组”的实现,即在连续块中分配的数据元素)相对于彼此具有空间局部性。您不知道(至少从问题中所述的任何内容)i相对于 的位置arr,因此您不能说这些对象是否显示出相对于彼此的空间局部性。

语句一个接一个地访问iarr[i]发生,因此它们表现出时间局部性,假设您对每个数组元素所做的工作很便宜;有了这个假设,arr后续迭代对不同元素的引用也将表现出时间局部性。i但是,如果对于循环的每次迭代,您调用某个函数,该函数在访问和之间需要很长时间arr,那么这些访问就不再具有时间局部性。

于 2011-10-27T14:40:09.510 回答