You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取进程实际有效且已映射的页面?是否需遍历全地址空间?

如何获取进程实际有效且已映射的用户空间页面?

完全不用遍历全部10GB地址空间——Linux提供了现成的工具和/proc文件系统机制,能直接获取进程实际有效且已映射的页面信息,效率高得多。

  • 利用/proc/[pid]/maps文件
    每个进程的/proc/[pid]/maps文件会列出该进程所有已映射的虚拟内存区域,未分配的虚拟地址空间不会出现在这里。每一行对应一个区域,包含起始/结束地址、权限、偏移量、设备号、inode以及关联的文件路径(如果是文件映射)。直接读取这个文件,就能拿到所有实际有效且已映射的内存范围,不用手动遍历整个地址空间。
    示例命令:cat /proc/1234/maps(替换1234为目标进程ID)

  • 利用/proc/[pid]/smaps文件
    这是maps的扩展版本,提供更精细的内存统计信息,比如每个映射区域的实际驻留内存(RSS)、私有内存大小、共享内存大小等。通过它可以更精准地判断哪些区域有实际分配的物理页面,而不仅仅是虚拟地址映射。

  • 使用pmap工具
    pmap是基于/proc文件系统封装的命令行工具,输入pmap -x [pid]就能直观展示进程的内存映射详情,包括每个区域的虚拟地址范围、实际占用物理内存(RSS)等,能快速筛选出有效已映射的页面所在区域。

  • 编程实现思路
    如果要自己写程序获取,直接解析/proc/[pid]/maps或smaps的内容即可,这比遍历整个虚拟地址空间高效无数倍。内核维护了进程的内存区域链表(vm_area_struct),但用户态无法直接访问,/proc文件系统已经把这些信息导出为可读文本,直接用文件IO读取就行。

内容的提问来源于stack exchange,提问作者aghozzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:10:32