内存与缓存、数据结构内存效率、数据结构缓存效率篇5

发布于:2025-02-10 ⋅ 阅读:(66) ⋅ 点赞:(0)

前言

亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力,谢谢大家!有问题请私信或联系邮箱:fn_kobe@163.com

物理结构:很大程度决定程序对内存和缓存使用效率,影响算法程序整体性能。

1、计算机存储设备

1.1、硬盘、内存、缓存

三者共同协作,确保计算机系统高效运行。
硬盘:长期存储大量数据。
内存:临时存储程序运行中正在处理数据。
缓存:存储经常访问数据和指令,提高程序运行效率。
在这里插入图片描述

1.2、金字塔结构

越靠近金字塔顶端存储设备速度越快、容量越小、成本越高

①硬盘难以被内存取代
i:内存中数据在断电后会丢失,不适合长期存储数据。
ii:内存成本是硬盘几十倍,消费者市场难以普及。

②缓存大容量和高速度难以兼得
随着 L1、L2、L3 缓存容量逐步增大,其物理尺寸会变大,与 CPU 核心之间物理距离会变远,导致数据传输时间增加,元素访问延迟变高。
在这里插入图片描述

1.3、数据流通过程

①过程
在程序运行时,数据会从硬盘中被读取到内存中,供CPU计算使用。
缓存看作CPU一部分,通过智能地从内存加载数据,给 CPU提供高速数据读取,提升程序执行效率,减少对较慢内存依赖。
在这里插入图片描述

2、数据结构内存效率

在内存空间利用方面,数组和链表各自具有优势和局限性
①内存有限,且同一块内存不能被多个程序共享:数据结构能够尽可能高效地利用空间。
数组元素紧密排列,不需要额外空间来存储链表节点间引用(指针),空间效率更高。然而,数组需要一次性分配足够连续内存空间,导致内存浪费,数组扩容需要额外时间和空间成本。相比之下,链表以“节点”为单位进行动态内存分配和回收,提供更大灵活性。

②反复申请与释放内存,空闲内存碎片化程度会越来越高:导致内存利用效率降低。数组其连续存储方式,相对不容易导致内存碎片化。相反,链表元素分散存储,在频繁插入与删除操作中,更容易导致内存碎片化。

3、数据结构缓存效率

①对比
缓存空间容量上远小于内存,但比内存快。缓存容量有限,只能存储一小部分频繁访问数据,当 CPU 尝试访问数据不在缓存中,发生缓存未命中,CPU从速度较慢内存中加载所需数据。

②缓存效率“:缓存未命中越少,CPU读写数据的效率就越高,程序性能也就越好。

③缓存采取数据加载机制
i:缓存行:缓存以缓存行为单位。相比于单个字节传输,缓存行传输形式更加高效。
ii:预取机制:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式将数据加载至缓存之中,从而提升命中率。
iii:空间局部性:一个数据被访问,附近数据近期也会被访问
iv:时间局部性:一个数据被访问,不久将来可能再次被访问。

Ps:
①做算法题倾向于选择基于数组实现栈,提供更高操作效率和随机访问能力,代价:需要预先为数组分配一定内存空间。
数据量非常大、动态性很高、栈预期大小难以估计,基于链表实现栈更加合适。链表能够将大量数据分散存储于内存不同部分,避免数组扩容产生额外开销。


网站公告

今日签到

点亮在社区的每一天
去签到