存储器分级
存储器分级(Memory Hierarchy)根据数据的使用频率,用不同的物理存储介质构成层次结构:高频数据放在离 CPU 最近、最快但最贵的存储中,低频数据放在更远、更慢但更廉价的存储中,整体形成缓存体系。
为什么需要分级
理想的存储器同时具备速度快、体积小、容量大、能耗低、断电不丢失等特性,但这些需求在物理上相互冲突:
- 体积小则容量受限;
- 元件密度高则散热压力大(CPU 需风扇或水冷);
- 离 CPU 越远,信号传输延迟越大。1GHz 时钟周期为 (1/10^9) 秒,光速 (3\times10^8) m/s,一个周期内光仅前进 30 cm,因此距离对速度影响显著;
- 相同价格下,速度越快能耗越高、发热越大。
因此必须用分级策略折中,而非单一存储器满足所有需求。
分级层次

从快到慢依次为:寄存器、L1-Cache、L2-Cache、L3-Cache、内存、硬盘/SSD。
寄存器(Register)
紧邻 CPU 控制单元与计算单元,速度最快、造价最高。数量通常在几十到几百之间,每个存若干字节(32 位 CPU 多数寄存器 4 字节,64 位多数 8 字节)。要求在约半个 CPU 时钟周期内完成读写。
L1-Cache
位于 CPU 内,大小几十 Kb 到几百 Kb,读写速度 2~4 个 CPU 周期。
L2-Cache
位于 CPU 内,比 L1 更远,大小视型号(常见约 2M),速度 10~20 周期。
L3-Cache
位于 CPU 内,比 L2 更远,大小视型号(如 i9:512K L1 / 2M L2 / 16M L3),速度 20~60 周期。
内存(Memory)
半导体硅材料,插在主板上经总线连接 CPU,大小从 16G 到数 T,速度约 200~300 周期。
SSD 与硬盘
SSD 断电后数据保留,但比内存慢 10~1000 倍;传统机械硬盘比内存慢约 100 万倍,已逐渐被 SSD 替代。

访问数据时,依次查询寄存器 → L1 → L2 → L3 → 内存,逐层下探。
缓存条目结构
缓存与内存都是线性存储。缓存可视为多列表格,每行一个缓存条目,本质是一个 Key-Value 存储:Key 为内存地址,Value 为地址的缓存值。
- 方案 1(线性遍历):每条目存"内存地址 + 缓存值",查询时遍历所有条目比对地址。最坏需检查全部条目,不可行。
- 方案 2(哈希定位):用
地址 % N这类哈希函数将内存地址映射到固定条目编号,再比对条目内地址是否一致。避免全表扫描,是缓存查找的基础。
指令预读
CPU 执行指令约 26 周期,而内存读取需 200300 周期。为避免每条指令都卡在内存读取,CPU 会将后续几十条到上百条指令预读进 L1-Cache(2~4 周期,可跟上执行速度)。
为避免数据缓存覆盖指令缓存,L1-Cache 通常分为指令区与数据区两部分。L2/L3 不参与指令预读,无需分区。
缓存命中率
- 命中(Hit):在缓存中找到所需数据。
- 穿透(Miss):未在缓存中找到,需下探。
统计上 L1 命中率约 80%,L1/L2/L3 合计命中率约 95%。高命中率使应用程序大多无需手动操作寄存器——缓存已保证性能,手动优化易出错且收益有限。
性能对比
| 级别 | 位置 | 典型大小 | 读写速度(CPU 周期) | 断电保留 | 造价 |
|---|---|---|---|---|---|
| 寄存器 | CPU 内,紧邻计算单元 | 几十~几百个(4/8 字节) | 约 0.5 | 否 | 最贵 |
| L1-Cache | CPU 内 | 几十 Kb~几百 Kb | 2~4 | 否 | 高 |
| L2-Cache | CPU 内 | 约 2M | 10~20 | 否 | 中高 |
| L3-Cache | CPU 内 | 约 16M | 20~60 | 否 | 中 |
| 内存 | 主板,经总线 | 16G~数 T | 200~300 | 否 | 较低 |
| SSD/硬盘 | 独立设备 | 数百 G~数 T | 比内存慢 10~1000 倍(硬盘再慢约 100 万倍) | 是 | 最低 |
离 CPU 越近,速度越快、造价越高、容量越小。
量级估算:内存比 SSD 快 101000 倍,L1 Cache 比内存快约 100 倍,因此 L1 Cache 比 SSD 快约 1000100000 倍。
小结
存储器分级用"快而贵"的存储承接高频数据、"慢而廉"的承接低频数据,构成缓存体系。所有缓存系统设计都可归结为存储资源的分级,核心关注条目结构、查找算法、命中率与置换策略(置换算法见并发控制篇)。