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