内存管理全解析:从原理到实践
1. 页面错误与内存映射
在程序环境初始化后,会遇到一定数量的小页面错误。例如,初始化后遇到 172 个小页面错误,调用 getrusage(2) 时又会有 14 个。当向内存填充数据时,页面错误数量会增加,如 442 - 186 = 256,这与缓冲区大小有关,1 MiB 的缓冲区正好是 256 页。第二次调用 memset(3) 没有影响,因为所有页面都已映射。
页面错误分为小错误和大错误:
- 小页面错误 :内核只需找到一个物理内存页面并将其映射到进程地址空间。
- 大页面错误 :当虚拟内存映射到文件时会发生,如使用 mmap(2) 。此时,内核不仅要找到内存页面并映射,还要从文件中读取数据填充,因此在时间和系统资源上成本更高。
通过 /proc 文件系统可以查看进程的内存映射。以下是 init 进程(PID 为 1)的内存映射示例:
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 [heap]
b6ded000-b6f1d000
超级会员免费看
订阅专栏 解锁全文
12万+

被折叠的 条评论
为什么被折叠?



