内存管理指南
1. 页面错误
在初始化程序环境后,会遇到 172 次小页面错误,调用 getrusage(2)
时还会再遇到 14 次(这些数字会因架构和所使用的 C 库版本而异)。重要的是,当向内存填充数据时,页面错误数量会增加:442 - 186 = 256。缓冲区大小为 1 MiB,即 256 页。第二次调用 memset(3)
没有区别,因为所有页面现在都已映射。
页面错误分为小页面错误和大页面错误:
- 小页面错误 :内核只需找到一个物理内存页面并将其映射到进程地址空间。
- 大页面错误 :当虚拟内存映射到文件时会发生,例如使用 mmap(2)
。此时,内核不仅要找到一个内存页面并进行映射,还需要从文件中读取数据填充该页面,因此大页面错误在时间和系统资源上的开销更大。
2. 进程内存映射
可以通过 /proc
文件系统查看进程的内存映射。例如,以下是 PID 为 1 的 init
进程的内存映射:
00008000-0000e000 r-xp 00000000 00:0b 23281745 /sbin/init
00016000-00017000 rwxp 00006000 00:0b 23281745 /sbin/init
00017000-00038000 rwxp 00000000 00:00 0