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

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



