【存储技术】局部性(时间局部性、空间局部性)

本文介绍了程序局部性原理,包括时间局部性和空间局部性。阐述了其在硬件层、操作系统级和应用程序设计中的应用,如高速缓存、主存缓存等。还分析了程序数据引用的局部性,如多维数组不同遍历方式的局部性差异,并对局部性进行了评价,最后提出相关问题待解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《CSAPP》 6.2 局部性

1、局部性分类

局部性原理对硬件和软件系统的设计性能都有极大的影响。
局部性通常分为:时间局部性空间局部性

1)时间局部性

时间局部性是指被引用过一次的内存位置很可能在不远的将来再被多次引用

2)空间局部性

空间局部性是指如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用其附近的一个内存位置

3)局部性原理举例

  • 硬件层,局部性原理允许计算机设计者通过引入小而快的高速缓存存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度
  • 操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存。
  • 类似的,操作系统用主存来缓存磁盘文件系统中最近被使用的磁盘块
  • 应用程序的设计,如Web浏览器将最近被请求的文档放在本地磁盘上,利用的就是时间局部性。大容量的Web服务器将最近被请求的文档放在前端磁盘高速缓存中,不需要服务器的干预就可满足对这些文档的请求。

2、对程序数据引用的局部性

比如,一个多维数组,我们按照行优先遍历的方法即一行完了再下一行的方式就是具有良好的空间局部性,因为计算机存储这些数据时也是按照行优先的方式进行的,所以行优先遍历就是依次访问相邻位置的数据。如果用列优先遍历,空间局部性就很,因为它不是访问相邻单元的数据。

3、评价局部性

  • 重复引用相同的变量的程序具有良好的时间局部性。
    如下数组求和的程序,for循环每次都要使用sum,这就是一个具有良好的时间局部性的程序,并且对于数组v的数据,是依次顺序访问,和其在计算机中存储的顺序相同,所以空间局部性也好。
int sumvec(int v[N])
{
	int i, sum = 0;
	for(i = 0; i < N; i++)
		sum += v[i];
	return sum;
}
  • 对于步长为k的引用模式的程序,步长越小,空间局部性越好
    就是多维数组的例子,在内存中大步跳来跳去的程序空间局部性会很差。

提出问题:为什么有良好局部性的程序通常比局部性差的程序运行得更快?

下一篇进行解答。

参考

《深入理解计算机系统》第6章.存储器层次结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kaimar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值