# 第 9 章 虚拟内存
返回总目录 · 上一章 · 下一章 · 整章阅读 · 练习题答案
# 阅读方式
- 整章连续阅读
- 本章也保留了所有按小节拆分的 Markdown 文件,适合精确查找、引用和单独阅读。
# 小节目录
- 第 9 章 虚拟内存
- 9.1 物理和虚拟寻址
- 9.2 地址空间
- 9.3 虚拟内存作为缓存的工具
- 9.3.1 DRAM 缓存的组织结构
- 9.3.2 页表
- 9.3.3 页命中
- 9.3.4 缺页
- 9.3.5 分配页面
- 9.3.6 又是局部性救了我们
- 9.4 虚拟内存作为内存管理的工具
- 9.5 虚拟内存作为内存保护的工具
- 9.6 地址翻译
- 9.6.1 结合高速缓存和虚拟内存
- 9.6.2 利用 TLB 加速地址翻译
- 9.6.3 多级页表
- 9.6.4 综合:端到端的地址翻译
- 9.7 案例研究:Intel Core i7/Linux 内存系统
- 9.7.1 Core i7 地址翻译
- 9.7.2 Linux 虚拟内存系统
- 9.8 内存映射
- 9.8.1 再看共享对象
- 9.8.2 再看 fork 函数
- 9.8.3 再看 execve 函数
- 9.8.4 使用 mmap 函数的用户级内存映射
- 9.9 动态内存分配
- 9.9.1
malloc和free函数 - 9.9.2 为什么要使用动态内存分配
- 9.9.3 分配器的要求和目标
- 9.9.4 碎片
- 9.9.5 实现问题
- 9.9.6 隐式空闲链表
- 9.9.7 放置已分配的块
- 9.9.8 分割空闲块
- 9.9.9 获取额外的堆内存
- 9.9.10 合并空闲块
- 9.9.11 带边界标记的合并
- 9.9.12 综合:实现一个简单的分配器
- 9.9.13 显式空闲链表
- 9.9.14 分离的空闲链表
- 9.10 垃圾收集
- 9.10.1 垃圾收集器的基本知识
- 9.10.2 Mark & Sweep 垃圾收集器
- 9.10.3 C 程序的保守 Mark & Sweep
- 9.11 C 程序中常见的与内存有关的错误
- 9.11.1 间接引用坏指针
- 9.11.2 读未初始化的内存
- 9.11.3 允许栈缓冲区溢出
- 9.11.4 假设指针和它们指向的对象是相同大小的
- 9.11.5 造成错位错误
- 9.11.6 引用指针,而不是它所指向的对象
- 9.11.7 误解指针运算
- 9.11.8 引用不存在的变量
- 9.11.9 引用空闲堆块中的数据
- 9.11.10 引起内存泄漏
- 9.12 小结
- 参考文献说明
- 家庭作业
- 家庭作业(续)