Linux 将页面堆在/proc/<;pid>/地图
我想写一个程序,可以解析Linux 将页面堆在/proc/<;pid>/地图,linux,memory-management,linux-kernel,Linux,Memory Management,Linux Kernel,我想写一个程序,可以解析 /proc//的输出映射了,以便进行分类 将其分为不同类别: Image:该页面要么是二进制文件的映射,要么是它所需的库之一 映射文件:该页面映射特定文件,例如字体 堆栈 Heap 私人数据 可共享的 正如您可能已经猜到的,主要思想是开发一个与sysinternals的vmmap工具等价的工具 对于Linux 我使用pathname字段来确定页面可以与哪个类别关联 如果路径名与/proc//exe符号链接的路径相同,或者如果 它是一个依赖项,因此它会转到Image
/proc//的输出映射了
,以便进行分类
将其分为不同类别:
:该页面要么是二进制文件的映射,要么是它所需的库之一Image
:该页面映射特定文件,例如字体映射文件
堆栈
Heap
私人数据
可共享的
pathname
字段来确定页面可以与哪个类别关联
如果路径名
与/proc//exe
符号链接的路径相同,或者如果
它是一个依赖项,因此它会转到Image
如果pathname
是一个文件且不是图像的一部分,则它是一个映射文件
如果pathname
与类似[stack:
或[heap]
的模式匹配,
然后页面分别是堆栈
或堆
当我在寻找一些关于/proc//maps
的信息时,我突然来了
这篇stackoverflow文章中,我发现如果您使用size参数调用malloc
高于某个阈值时,会创建一个私有匿名映射
增加堆的大小
[heap]
?若否,如何分类?私有数据
和可共享
类别谢谢
匿名映射
可以通过mmap
和MAP\u anonymous
标志来完成,它不是[heap]
。问题是heap也是匿名映射。有文件备份映射和匿名映射,仅此而已。堆栈,堆-它们是匿名内存,它们有单独的名称,因为它们的特殊角色或处理它们的特殊API(sbrk)@ChrisTsui谢谢!我从[例如,匿名映射可能表示一个BSS
段,因此不是堆
@AlexHoppus你知道我如何实现与Windows上的vmmap
相同的工作吗?似乎我不能依赖/proc//maps
。