csapp 第9章 虚拟内存 阅读笔记
第9章 虚拟内存
虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互
- 将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,并通过这种方式,高效地使用了主存
- 为每个进程提供了一致的地址空间,从而简化了内存管理
- 保护了每个进程的地址空间不被其他进程破坏
为什么要理解虚拟内存?
- 虚拟内存是核心的
- 虚拟内存是强大的
- 虚拟内存是危险的
物理和虚拟寻址
地址空间
虚拟内存作为缓存的工具
虚拟内存作为内存管理的工具
地址翻译
内存映射
伙伴系统
优点:快速搜索和快速合并
缺点:要求块大小为2的幂可能导致显著的内部碎片
垃圾收集
C程序中常见的与内存有关的错误
- 间接引用坏指针
- 读未初始化的内存
- 允许栈缓冲区溢出
- 假设指针和它们指向的对象是相同大小的
- 造成错位错误
- 引用指针,而不是它所指向的对象
- 误解指针运算
- 引用不存在的变量
- 引用空闲堆中的数据
- 引起内存泄漏