给定代码段中引用的时间和空间位置的所有出现
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++
中的 1 递增。
那么我在所有这些方面都是正确的,我错过了别的东西吗?
定义是相反的。
空间位置 - 空间中的位置,访问附近的内存位置。
时间位置 - 时间位置,多次访问同一位置。
在设计缓存时使用空间局部性是这样的,当你的程序需要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]
不会有单独的说明。它将是在循环中使用的单个指令,使用每次计算的内存地址。正如我上面所解释的,优点是缓存不需要为下一次迭代获取数据,因为它可能会作为循环中早期迭代的一部分获取。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 将值指定给向量(2D)的向量中的某个位置
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- C++:对不存在的命名空间使用命名空间指令
- 给定代码段中引用的时间和空间位置的所有出现
- 位置实用程序例程与使用类型相同的命名空间
- C++命名空间std的定义方式/位置(文档/标准链接)
- 让我们C++推断定义参数的类/命名空间的位置
- C++ 不确定如何让我的程序输出空间的位置
- 如何判断共享库在进程地址空间中的加载位置
- 取消将二维屏幕位置投影到三维世界空间
- 使用结束符的位置作为交换空间反转以空结尾的字符串
- 交换两个数字而不使用额外的空间,如果两个数字都指向相同的位置,则不起作用
- 查找包含在MSVC中的c++名称空间的位置
- 如何在给定时间后确定物体在二维空间中的位置