给定代码片段中引用的时间和空间局部性的所有出现

All occurrences of temporal and spatial locality of reference in a given code snippet

我已阅读有关空间时间 地点的信息。

简而言之。

时间局部性: 程序经常重复访问相同的内存位置。

空间局部性: 程序还经常重复访问相邻的内存位置。

现在我要分析下面的代码,找出所有出现的时间和空间参考局部性。

for (int i = 0, j = 10; i < 100; i++)
    a[i] = j++;

我只想到了以下几点

空间

时间


所以我在所有这些方面都正确吗?我是否遗漏了其他内容?

定义正好相反。

空间局部性 - space 中的局部性,访问附近的内存位置。

时间局部性 - 时间局部性,多次访问同一位置。

在设计缓存时使用空间局部性,当您的程序需要 a[i] 时,缓存不会从内存中获取 a[i]。它获取的条目数 a[i], a[i+1], a[i+2] ... 与缓存行的大小一样多。通过这样做,缓存预计您可能很快就会访问 a[i+1]。当你这样做时,缓存不需要从内存中获取它,由于使用了空间局部性,它已经存在了。

访问 ij 时会出现时间局部性。每次需要 ij 时,不需要从内存中获取它,因为它已被缓存。通过缓存,ij,缓存以为你会再次访问它,因此节省了从内存中获取它的时间。

为了回答确切的问题,是的,您已经确定了空间和时间局部性的位置。唯一不正确的是,您的陈述“执行所有这些操作的指令在内存中彼此相邻存储”。不会有访问 a[i]a[i+1] 的单独说明。它将是循环内使用的单个指令,使用每次计算的内存地址。正如我上面所解释的,优点是缓存不需要为下一次迭代获取数据,因为它很可能作为循环中早期迭代的一部分获取。