memory - 了解 mips 代码中的数据缓存局部性
问题描述
我一直在浏览stackoverflow,找不到关于这个的例子。我了解数据缓存的时间和空间局部性的概念:
时间地点:重新访问地址
空间局部性:每次
x
内存访问都会受到打击
但是在 mips 代码中它看起来如何呢?谁能给出具体的例子并展示它是如何工作的?
解决方案
空间和时间位置与特定架构、mips 或其他架构无关。它更多是程序的属性以及它们在计算机上的处理方式。
时间局部性表明,如果您访问给定的内存位置,很可能会在几次之后访问相同的位置。
很难给出一个具体的例子,但想法是,例如,如果你修改一个变量,这个变量很可能会在程序中的几条指令之后被使用。当然,可以找到反例,但大多数时候计算完成并存储在变量中,这是因为我们稍后需要这个操作的结果。
您对空间局部性的定义是不正确的。空间局部性表明,如果需要某个存储位置中的信息,则很可能一段时间后也需要位于附近存储位置中的其他信息。
此属性是由于许多编程语言结构对应于存储在连续内存位置中的数据这一事实。这包括 :
数组的元素
结构的字段
堆栈中连续地址中的局部变量
在堆栈中也接近的函数的参数
同样,可以找到反例,但是,例如,如果访问字符串的第一个字符,则可能是对字符串进行某种计算、搜索或其他操作,并且大多数情况下,字符串的其他字符也将被访问。
推荐阅读
- shell - 在 ftp 服务器中递归搜索文件扩展名
- r - 复制行 [max] 次,同时复制频率较低的项目的值 [max-Y] 次
- javascript - 从类构造函数调用函数
- drupal - Drupal 7 webform模块对webform的解释
- sublimetext3 - 点击键盘上的选项卡正在将空白文本复制到我的剪贴板中
- excel - excel数据提取的网站
- java - ColdFusion 中的 JRE 版本
- php - 如何在触发的函数内执行脚本
- java - 每帧通过 OpenGL 渲染两次,不同的库
- xamarin.forms - Akavache Secure blob 在 Xamarin 上是否真正安全?