从缓存来看程序局部性提高程序运行效率的原因

本文探讨了程序局部性原理,包括时间局部性和空间局部性,以及它们如何影响程序性能。通过缓存命中和失效的讨论,阐述了如何利用局部性优化程序执行效率。此外,还分析了不同数据访问方式(如按行和按列)对程序性能的影响。
摘要由CSDN通过智能技术生成

一、什么是程序局部性

一个写的优美的程序往往具有一个良好的局部性,那么什么是程序局部性呢?

程序局部性是指程序在运行的一段时间内,它们更加倾向于引用的数据靠近最近引用过的数据。因此,整个程序的执行会限制于程序中的某一部分,对应的执行代码的时候访问的存储空间也局限于某一个内存区域。现在不论是操作系统还是应用程序,都参考了局部性的原理,例如:缓存机制、CPU指令执行顺序等。在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存存储器的小而快速的存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存。

而从程序局部性来分类,主要有两个种类,一个是时间局部性,一个是空间局部性

PS:算法局部性

1.1 时间局部性

时间局部性通常运用在循环当中,一条指令一旦被执行,那么不久以后该指令可能再次被执行,被访问过的存储器位置也肯能会在不久之后会被再次访问,它强调的是数据的重复访问

而利用时间局部性的原理缓存可以极大的提高数据重复访问的性能。

int sum( int *array, int n){
    int sum = 0;
    for ( int i = 0; i < n; i++ ){
        sum += array[i];
    }
    return sum;
}

如上代码中的sum变量就是存在于循环当中,这个变量在此循环中被多次访问,因此sum就具有良好的时间局部性。

1.2 空间局部性

程序访问了某一个存储器的位置,那么不久之后,它附近的存储单元也肯能会被访问,空间局部性更多的是强调它附近的位置会被经常引用。

int sum( int *array, int n){
    int sum = 0;
    for ( int i = 0; i < n; i++ ){
        sum += array[i];
    }
    return sum;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值