常用概念之程序局部性原理
来源:互联网 发布:淘宝助手是什么 编辑:程序博客网 时间:2024/06/05 06:56
程序局部性原理
程序的局部性原理是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。它们倾向于引用的数据项邻近于其他最近引用过的数据项,或者邻近于最近自我引用过的数据项。
在现代计算机系统的各个层次,从硬件到操作系统、应用程序等,设计上都利用了局部性原理。比如缓存机制,CPU指令顺序处理等。
局部性通常有两种形式:时间局部性和空间局部性,下面分别进行简单介绍。
时间局部性(temporal locality)
时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。强调数据的重复访问。
利用时间局部性,缓存在现代程序系统中扮演着重要角色,数据缓存,磁盘缓存,文件缓存等,极大提高数据的重复访问性能。而在程序设计中,循环体则是时间局部性常见的一个场景:
int sum(std::vector<int>& vecNums){ int nSum = 0; int nNumsLen = vecNums.size(); for (int nIndex = 0; nIndex < nNumsLen; nIndex++) { nSum += vecNums[nIndex]; } return nSum;}
示例中nSum及nNumsLen具有较好的时间局部性。
空间局部性(spatial locality)
空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。强调连续空间数据的访问,一般顺序访问每个元素(步长为1)时具有最好的空间局部性,步长越大,空间局部性越差。
/** 我们知道,二维数组在内存是线性存储的,按行排列* sumarrayrows函数中按行访问每个数据,内存中是顺序访问的,步长为1* sumarraycols函数中按列访问数据,步长为M,空间局部性较差*/int sumarrayrows(int a[M][N]){ int nSum = 0; for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { nSum += a[i][j]; } } return nSum;}int sumarraycols(int a[M][N]){ int nSum = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { nSum += a[j][i]; } } return nSum;}
阅读全文
0 0
- 常用概念之程序局部性原理
- 程序的局部性原理
- 程序局部性原理
- 程序的局部性原理
- 局部性原理
- 局部性原理
- 局部性原理
- 局部性原理
- 局部性原理
- 局部性原理【读书摘记】
- 局部性原理与高速缓存
- 时间空间局部性原理
- 利用程序中的局部性
- 程序的局部性
- 程序时空局部性访问
- 局部性
- 原理篇-局部性与并行性
- 程序设计原则——局部性原理
- 图结构练习——BFS——从起始点到目标点的最短步数
- Xception —— 深度可分卷积
- j2ee的web项目,在浏览器中发起一个该项目中html页面的绝对地址,也是发起的一个http url请求,请求的响应报文的结果就是该html页面的所有html代码
- 变长参数函数(转载)
- IPtables学习笔记四
- 常用概念之程序局部性原理
- 嵌入式系统原理及应用教程期末复习
- poj3278-Catch That Cow
- ssh 公钥私钥认证原理
- 触发器
- 802.11n协议帧格式详解
- 兼容性测试实习
- 人工智能课实践-一字棋问题
- 将十进制数字转换为二进制