From 020eb622b781109146ff7389dde2eb357a81538d Mon Sep 17 00:00:00 2001 From: krahets Date: Sun, 26 Nov 2023 01:51:39 +0800 Subject: [PATCH] Add the section of ram_and_cache --- .../linked_list.md | 17 ++--- .../computer_storage_devices.png | Bin 0 -> 41837 bytes .../ram_and_cache.assets/storage_pyramid.png | Bin 0 -> 53492 bytes .../ram_and_cache.md | 70 ++++++++++++++++++ .../classification_of_data_structure.md | 10 ++- mkdocs.yml | 4 +- 6 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 docs/chapter_array_and_linkedlist/ram_and_cache.assets/computer_storage_devices.png create mode 100644 docs/chapter_array_and_linkedlist/ram_and_cache.assets/storage_pyramid.png create mode 100644 docs/chapter_array_and_linkedlist/ram_and_cache.md diff --git a/docs/chapter_array_and_linkedlist/linked_list.md b/docs/chapter_array_and_linkedlist/linked_list.md index e485bb52d..e03d8fd5f 100755 --- a/docs/chapter_array_and_linkedlist/linked_list.md +++ b/docs/chapter_array_and_linkedlist/linked_list.md @@ -439,15 +439,14 @@

  数组与链表的效率对比

-| | 数组 | 链表 | -| ---------- | ------------------------ | ------------ | -| 存储方式 | 连续内存空间 | 分散内存空间 | -| 缓存局部性 | 友好 | 不友好 | -| 容量扩展 | 长度不可变 | 可灵活扩展 | -| 内存效率 | 占用内存少、浪费部分空间 | 占用内存多 | -| 访问元素 | $O(1)$ | $O(n)$ | -| 添加元素 | $O(n)$ | $O(1)$ | -| 删除元素 | $O(n)$ | $O(1)$ | +| | 数组 | 链表 | +| -------- | ------------------------------ | -------------- | +| 存储方式 | 连续内存空间 | 分散内存空间 | +| 容量扩展 | 长度不可变 | 可灵活扩展 | +| 内存效率 | 元素占用内存少、但可能浪费空间 | 元素占用内存多 | +| 访问元素 | $O(1)$ | $O(n)$ | +| 添加元素 | $O(n)$ | $O(1)$ | +| 删除元素 | $O(n)$ | $O(1)$ | ## 常见链表类型 diff --git a/docs/chapter_array_and_linkedlist/ram_and_cache.assets/computer_storage_devices.png b/docs/chapter_array_and_linkedlist/ram_and_cache.assets/computer_storage_devices.png new file mode 100644 index 0000000000000000000000000000000000000000..85005ab950a1edef439d1bcf9caf781d5d1e799e GIT binary patch literal 41837 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 Q8}QS+Zg{Qqiv92Z2Mw8Y6aWAK literal 0 HcmV?d00001 diff --git a/docs/chapter_array_and_linkedlist/ram_and_cache.assets/storage_pyramid.png b/docs/chapter_array_and_linkedlist/ram_and_cache.assets/storage_pyramid.png new file mode 100644 index 0000000000000000000000000000000000000000..0fdd39a76e736139106d3d689e3a49a79e4af3ba GIT binary patch literal 53492 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
    M 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   计算机的存储设备

    + +| | 硬盘 Hard Disk | 内存 RAM | 缓存 Cache | +| ------ | ---------------------------------------- | -------------------------------------- | ------------------------------------------------- | +| 用途 | 长期存储数据,包括操作系统、程序、文件等 | 临时存储当前运行的程序和正在处理的数据 | 存储经常访问的数据和指令,减少 CPU 访问内存的次数 | +| 易失性 | 断电后数据不会丢失 | 断电后数据会丢失 | 断电后数据会丢失 | +| 容量 | 较大,TB 级别 | 较小,GB 级别 | 非常小,MB 级别 | +| 速度 | 较慢,几百到几千 MB/s | 较快,几十 GB/s | 非常快,几十到几百 GB/s | +| 价格 | 较便宜,几毛到几元 / GB | 较贵,几十到几百元 / GB | 很贵,几元 / KB | + +我们可以将计算机存储系统想象为下图所示的金字塔结构。越靠近金字塔顶端的存储设备的速度越快、容量越小、成本越高。 + +你也许会好奇,既然硬盘的速度是最慢的,为什么不用内存来替代硬盘呢?首先,内存中的数据在断电后会丢失,因此它不适合长期存储数据;其次,内存的成本大约是硬盘的几十倍,这使得它难以在消费者市场普及。 + +![计算机存储系统](ram_and_cache.assets/storage_pyramid.png) + +!!! note + + 计算机的存储层次结构体现了速度、容量和成本三者之间的精妙平衡。实际上,这种权衡普遍存在于所有工业领域,它要求我们在不同的优势和限制之间找到最佳的平衡点。 + +总的来说,**硬盘用于长期存储大量数据,内存用于临时存储程序运行中正在处理的数据,而缓存则用于存储经常访问的数据和指令**,以提高程序运行效率。这三者共同协作,确保计算机系统的高效运行。 + +如下图所示,在程序运行时,数据会从硬盘中被读取到内存中,供给 CPU 计算使用。缓存可以看作是 CPU 的一部分,**它通过智能地从内存加载数据**,给 CPU 提供高速的数据读取,从而显著提升程序的执行效率,减少对较慢的内存的依赖。 + +![硬盘、内存和缓存之间的数据流通](ram_and_cache.assets/computer_storage_devices.png) + +## 数据结构的内存效率 + +在内存空间利用方面,数组和链表具有各自的优势和局限。 + +一方面,**内存是有限的,且同一块内存不能被多个程序共享**,因此我们希望数据结构能够尽可能高效地利用空间。数组的元素紧密排列,不需要额外的空间来存储链表节点间的引用(指针),因此空间效率更高。然而,数组需要一次性分配足够的连续内存空间,这可能导致内存的浪费,数组扩容也需要额外的时间和空间成本。相比之下,链表以“节点”为单位进行动态内存分配和回收,这种方式提供了更大的灵活性。 + +另一方面,在程序运行时,**随着反复申请与释放内存,空闲内存的碎片化程度会越来越高**,从而导致内存的利用效率降低。数组由于其连续的存储方式,相对不容易导致内存碎片化。相反,链表的元素是分散存储的,在频繁的插入与删除操作中,更容易导致内存碎片化。 + +## 数据结构的缓存效率 + +缓存虽然在空间容量上远小于内存,但它比内存快得多,在程序执行速度上起着至关重要的作用。由于缓存的容量有限,它只能存储一小部分频繁访问的数据。因此,当 CPU 尝试访问的数据不在缓存中时,就会发生「缓存未命中 cache miss」,此时 CPU 不得不从速度较慢的内存中加载所需数据。 + +显然,**“缓存未命中”越少,CPU 读写数据的效率就越高**,程序性能也就越好。我们将 CPU 从缓存中成功获取数据的比例称为「缓存命中率 cache hit rate」,这个指标通常用来衡量缓存效率。 + +为了尽可能达到更高效率,缓存会采取以下数据加载机制。 + +- **缓存行**:缓存不是单个字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行的传输形式更加高效。 +- **预取机制**:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式将数据加载至缓存之中,从而提升命中率。 +- **空间局部性**:如果一个数据被访问,那么它附近的数据可能也会近期被访问。因此,缓存在加载某一数据时,也会将其附近的数据加载进来,以提高命中率。 +- **时间局部性**:如果一个数据被访问,那么它在不久的将来很可能再次被访问。缓存利用这一原理,通过保留最近访问过的数据来提高命中率。 + +实际上,**数组和链表对缓存的利用效率也是不同的**,主要体现在以下几个方面。 + +- **占用空间**:链表元素比数组元素占用空间更多,导致缓存中容纳的有效数据量更少。 +- **缓存行**:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到的无效数据的比例更高。 +- **预取机制**:数组比链表的数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。 +- **空间局部性**:数组被存储在集中的内存空间中,因此被加载数据的附近数据更有可能即将被访问。 + +总体而言,**数组具有更高的缓存命中率,因此它在操作效率上通常优于链表**。这使得在解决算法问题时,基于数组实现的数据结构往往更受欢迎。 + +需要注意的是,**高缓存效率并不意味着数组在所有情况下都优于链表**。实际应用中选择哪种数据结构,应根据具体需求来决定。例如,数组和链表都可以实现“栈”数据结构(下一章会详细介绍),但它们适用于不同场景。 + +- 在做算法题时,我们会倾向于选择基于数组实现的栈,因为它提供了更高的操作效率和随机访问的能力,代价仅是需要预先为数组分配一定的内存空间。 +- 如果数据量非常大、动态性很高、栈的预期大小难以估计,那么基于链表实现的栈就更加合适。链表能够将大量数据分散存储于内存的不同部分,并且避免了数组扩容产生的额外开销。 diff --git a/docs/chapter_data_structure/classification_of_data_structure.md b/docs/chapter_data_structure/classification_of_data_structure.md index 69e122407..1983ddcc5 100644 --- a/docs/chapter_data_structure/classification_of_data_structure.md +++ b/docs/chapter_data_structure/classification_of_data_structure.md @@ -21,17 +21,19 @@ ## 物理结构:连续与分散 -在计算机中,内存和硬盘是两种主要的存储硬件设备。硬盘主要用于长期存储数据,容量较大(通常可达到 TB 级别)、速度较慢。内存用于运行程序时暂存数据,速度较快,但容量较小(通常为 GB 级别)。 - -**在算法运行过程中,相关数据都存储在内存中**。下图展示了一个计算机内存条,其中每个黑色方块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大小的数据,在算法运行时,所有数据都被存储在这些单元格中。 +**当算法程序运行时,正在处理的数据主要被存储在内存中**。下图展示了一个计算机内存条,其中每个黑色方块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大小的数据。 **系统通过内存地址来访问目标位置的数据**。如下图所示,计算机根据特定规则为表格中的每个单元格分配编号,确保每个内存空间都有唯一的内存地址。有了这些地址,程序便可以访问内存中的数据。 ![内存条、内存空间、内存地址](classification_of_data_structure.assets/computer_memory_location.png) +!!! note + + 值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及到地址空间、内存管理、缓存机制、虚拟和物理内存等概念。 + 内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。**因此在数据结构与算法的设计中,内存资源是一个重要的考虑因素**。比如,算法所占用的内存峰值不应超过系统剩余空闲内存;如果缺少连续大块的内存空间,那么所选用的数据结构必须能够存储在分散的内存空间内。 -如下图所示,**物理结构反映了数据在计算机内存中的存储方式**,可分为连续空间存储(数组)和分散空间存储(链表)。物理结构从底层决定了数据的访问、更新、增删等操作方法,同时在时间效率和空间效率方面呈现出互补的特点。 +如下图所示,**物理结构反映了数据在计算机内存中的存储方式**,可分为连续空间存储(数组)和分散空间存储(链表)。物理结构从底层决定了数据的访问、更新、增删等操作方法,在时间效率和空间效率方面呈现出互补的特点。 ![连续空间存储与分散空间存储](classification_of_data_structure.assets/classification_phisical_structure.png) diff --git a/mkdocs.yml b/mkdocs.yml index 5d3ad56d9..a56d09c59 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -185,7 +185,9 @@ nav: - 4.1   数组: chapter_array_and_linkedlist/array.md - 4.2   链表: chapter_array_and_linkedlist/linked_list.md - 4.3   列表: chapter_array_and_linkedlist/list.md - - 4.4   小结: chapter_array_and_linkedlist/summary.md + # [status: new] + - 4.4   内存与缓存 *: chapter_array_and_linkedlist/ram_and_cache.md + - 4.5   小结: chapter_array_and_linkedlist/summary.md - 第 5 章   栈与队列: # [icon: material/stack-overflow] - chapter_stack_and_queue/index.md