首页 > 系统相关 >算法与数据结构——内存与缓存

算法与数据结构——内存与缓存

时间:2024-08-26 10:36:36浏览次数:9  
标签:缓存 访问 内存 数据结构 数据 CPU 加载

内存与缓存

数组和链表两种数据结构分别代表了“连续存储”和“分散存储”两种物理结构。实际上,物理结构在很大程度上决定了程序对内存和缓存的使用效率,进而影响算法程序的整体性能。

计算机存储设备

计算机中包括三种类型的存储设备:硬盘(hard disk)、内存(random-access memory,RAM)、缓存(cache memory)。

它们有各自的用途与特性:

  • 硬盘:
    • 用途:长期存储数据,包括操作系统、程序、文件等。
    • 特性:断电后数据不会丢失
    • 容量:较大,TB级别
    • 速度:较慢,几百到几千 MB/s
  • 内存:
    • 用途:临时存储当前运行的程序和正在处理的数据。
    • 特性:断电后数据会丢失
    • 容量:较小,GB级别
    • 速度:较快,几十GB/s
  • 缓存:
    • 用途:存储经常访问的数据和指令,减少CPU访问内存的次数
    • 特性:断电后数据会丢失
    • 容量:非常小,MB级别
    • 速度:非常快,几十到几百GB/s

我们可以将计算机存储系统想象为如图所示的金字塔,越靠近金字塔顶端的存储设备的速度越快、容量越小、成本越高。

总的来说,硬盘用于长期存储大量数据,内存用于存储程序运行中正在处理的数据,而缓存则用于经常访问的数据和指令,以提高程序运行效率。三者共同协作,确保计算机系统高效运行。

在程序运行时,数据会从硬盘中被读取到内存中,供CPU计算使用。缓存可以看做CPU的一部分,它通过智能地从内存加载数据,给CPU提供高速的数据读取,从而显著提升程序的执行效率,减少对较慢内存的依赖。

数据结构的缓存效率

缓存虽然在空间容量上远小于内存,但它比内存快得多,在程序执行速度上起着至关重要的作用。由于缓存的容量有限,只能存储一小部分频繁访问的数据,因此当CPU尝试访问的数据不在缓存中时,就会发生缓存未命中(cache miss),此时CPU不得不从速度较慢的内存中国加载所需数据。

缓存未命中发生越少,CPU读写数据的效率就越高,程序性能也就越好。我们将CPU从缓存中成功获取数据的比例称为缓存命中率,用这个指标来衡量缓存效率。

为尽可能达到更高的效率,缓存会采取以下数据加载机制。

  • 缓存行:缓存不是单字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行的传输形式更加高效。
  • 预取机制:处理器会尝试预测数据访问模式(如顺序访问、固定步长访问等),并根据特定模式将数据加载至缓存之中从而提升命中率。
  • 空间布局性:如果一个数据被访问,那么它附近的数据也可能近期被访问。因此缓存在加载某一数据时,也会加载其附近的数据,以提高命中率。
  • 时间布局性:如果一个数据被访问,那么它在不久的将来很可能再次被访问。缓存利用这一原理,通过保留最近访问过的数据来提高命中率。

 

实际上,数组和链表对缓存的利用效率是不同的,主要体现在以下几个方面。

  • 占用空间:链表元素比数据元素占用空间更多,导致缓存中容纳有效数据量更少。
  • 缓存行:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到无效数据的比例跟高。
  • 预取机制:数组比链表数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。
  • 空间布局性:数组被存储在集中的内存空间中,因此被加载数据附近的数据更有可能即将被访问。

数组具有更高的缓存命中率,因此它在操作效率上通常优于链表。使得在解决算法问题时,基于数组实现的数据结构更受欢迎。

注意:高缓存效率并不意味着数组在所有情况下都优于链表。实际应用中选择哪种数据结构,应根据具体需求来决定。

标签:缓存,访问,内存,数据结构,数据,CPU,加载
From: https://www.cnblogs.com/1873cy/p/18380084

相关文章

  • 数组与内存分析
    数组长度确定元素类型相同数组的变量属于引用类型,其本身就是对象,其元素相对于对象的成员变量,保存在堆中数组的定义int[]nums;//主流intnumss[];//方便c和c++掌握javadouble[]a=newdouble[]{1,2,3}; a.length;获得数组a的长度......
  • IEC61850教程,第二章:IEC 61850 数据结构
    第二章:IEC61850数据结构平时学习标准或调试IEC61850设备,需要IEC61850模拟器,推荐一款:客户端下载地址:IEC61850客户端模拟器服务端下载地址:IEC61850服务端模拟器IEC61850数据结构逻辑设备(LogicalDevice)变电站中的每个设备都是逻辑设备。下图中的逻辑设备是Bay控制器......
  • 25版王道数据结构课后习题详细分析 第五章 树与二叉树 5.3 二叉树的遍历和线索二叉树
    一、单项选择题————————————————————————————————————————解析:二叉树中序遍历的最后一个结点一定是从根开始沿右子女指针链走到底的结点,设用p指示。若结点p不是叶结点(其左子树非空),则前序遍历的最后一个结点在它的左子树中,A、B......
  • JavaScript中的内存泄露
    一、是什么内存泄漏(Memoryleak)是在计算机科学中,由于疏忽或错误造成程序未能释放已经不再使用的内存并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费程序的运行需要内存。只要程序提......
  • C语⾔内存函数
    文章目录1.memcpy使用和模拟实现memcpy的使用:memcpy的模拟实现:2.memmove使用和模拟实现memmove的使用:memmove的模拟实现:3.memset函数的使⽤4.memcmp函数的使用1.memcpy使用和模拟实现void*memcpy(void*destination,constvoid*source,size_tnum);......
  • 【MySQL-23】万字总结<InnoDB引擎>——【逻辑存储结果&架构(内存结构,磁盘结构,后台线程)&事
    前言大家好吖,欢迎来到YY滴MySQL系列,热烈欢迎!本章主要内容面向接触过C++的老铁主要内容含:欢迎订阅YY滴C++专栏!更多干货持续更新!以下是传送门!YY的《C++》专栏YY的《C++11》专栏YY的《Linux》专栏YY的《数据结构》专栏YY的《C语言基础》专栏YY的《单片机》专栏YY......
  • 考研系列-数据结构冲刺课复习笔记(上)
    写在前面:这篇文章是对王道考研冲刺课的高度总结,可以当做最后复习的提纲和知识点复习参考注意所有数据结构的结构体定义、算法的时间空间复杂度一、线性表1.顺序表        创建(静态、动态)、销毁、增删改查2.链表(1)单链表        分为带头结点的和不带......
  • 【数据结构-前缀异或和】力扣1177. 构建回文串检测
    给你一个字符串s,请你对s的子串进行检测。每次检测,待检子串都可以表示为queries[i]=[left,right,k]。我们可以重新排列子串s[left],…,s[right],并从中选择最多k项替换成任何小写英文字母。如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果为......
  • 浅谈【数据结构】树与二叉树一
    目录1、树与二叉树1.1树的概念2、二叉树2.1二叉树的五大形态2.2二叉树的性质2.3二叉树的存储结构2.4二叉树的遍历谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注没错,说的就是你,不用再怀疑!!!希望我的文章内容能对你有帮助,一起努力吧!!!1、树与二叉树1.1树......
  • 浅谈【数据结构】树与二叉树二
    目录1、二叉排序树1.1二叉树排序树插入1.1.1两种插入方法1.1.2循环法1.1.3递归法1.2二叉树的打印1.3二叉树的结点删除1.4销毁二叉树1.5层次打印谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注没错,说的就是你,不用再怀疑!!!希望我的文章内容能对你有帮助,一......