给定代码片段中引用的时间和空间局部性的所有出现
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++;
我只想到了以下几点
空间
a[i] = j++;
引用完 a[i]
我们即将引用 a[i+1]
.
- 执行所有这些操作的指令在内存中彼此相邻存储。
时间
i
与 100 相比。
i
加一:i++
.
- 赋值
a[i] = j++
使用 i
作为数组索引。
- 数组基础
a
用于索引每个 a[i]
。
j
递增赋值 a[i] = j++
.
所以我在所有这些方面都正确吗?我是否遗漏了其他内容?
定义正好相反。
空间局部性 - space 中的局部性,访问附近的内存位置。
时间局部性 - 时间局部性,多次访问同一位置。
在设计缓存时使用空间局部性,当您的程序需要 a[i]
时,缓存不会从内存中获取 a[i]
。它获取的条目数 a[i], a[i+1], a[i+2] ...
与缓存行的大小一样多。通过这样做,缓存预计您可能很快就会访问 a[i+1]
。当你这样做时,缓存不需要从内存中获取它,由于使用了空间局部性,它已经存在了。
访问 i
和 j
时会出现时间局部性。每次需要 i
和 j
时,不需要从内存中获取它,因为它已被缓存。通过缓存,i
和 j
,缓存以为你会再次访问它,因此节省了从内存中获取它的时间。
为了回答确切的问题,是的,您已经确定了空间和时间局部性的位置。唯一不正确的是,您的陈述“执行所有这些操作的指令在内存中彼此相邻存储”。不会有访问 a[i]
、a[i+1]
的单独说明。它将是循环内使用的单个指令,使用每次计算的内存地址。正如我上面所解释的,优点是缓存不需要为下一次迭代获取数据,因为它很可能作为循环中早期迭代的一部分获取。
我已阅读有关空间 和时间 地点的信息。
简而言之。
时间局部性: 程序经常重复访问相同的内存位置。
空间局部性: 程序还经常重复访问相邻的内存位置。
现在我要分析下面的代码,找出所有出现的时间和空间参考局部性。
for (int i = 0, j = 10; i < 100; i++)
a[i] = j++;
我只想到了以下几点
空间
a[i] = j++;
引用完a[i]
我们即将引用a[i+1]
.- 执行所有这些操作的指令在内存中彼此相邻存储。
时间
i
与 100 相比。i
加一:i++
.- 赋值
a[i] = j++
使用i
作为数组索引。 - 数组基础
a
用于索引每个a[i]
。 j
递增赋值a[i] = j++
.
所以我在所有这些方面都正确吗?我是否遗漏了其他内容?
定义正好相反。
空间局部性 - space 中的局部性,访问附近的内存位置。
时间局部性 - 时间局部性,多次访问同一位置。
在设计缓存时使用空间局部性,当您的程序需要 a[i]
时,缓存不会从内存中获取 a[i]
。它获取的条目数 a[i], a[i+1], a[i+2] ...
与缓存行的大小一样多。通过这样做,缓存预计您可能很快就会访问 a[i+1]
。当你这样做时,缓存不需要从内存中获取它,由于使用了空间局部性,它已经存在了。
访问 i
和 j
时会出现时间局部性。每次需要 i
和 j
时,不需要从内存中获取它,因为它已被缓存。通过缓存,i
和 j
,缓存以为你会再次访问它,因此节省了从内存中获取它的时间。
为了回答确切的问题,是的,您已经确定了空间和时间局部性的位置。唯一不正确的是,您的陈述“执行所有这些操作的指令在内存中彼此相邻存储”。不会有访问 a[i]
、a[i+1]
的单独说明。它将是循环内使用的单个指令,使用每次计算的内存地址。正如我上面所解释的,优点是缓存不需要为下一次迭代获取数据,因为它很可能作为循环中早期迭代的一部分获取。