问题是:
如何判断进程的VMA使用了多少内存(无论是在用户空间还是在内核中)?
我会给你一个简短的解释,让你明白我为什么要问这个。
我在Linux机器上运行几个进程和一个驱动程序(内核模块)。进程内存已锁定(不可交换),因此我要确保模块使用的内存和进程不会占用我物理内存总量的90%。为了减少malloc开销,我使用mmap。
我真正需要知道的是,我的进程实际消耗了多少内存,而不是它们需要多少内存,并且尽可能多地告诉我,我只是遗漏了VMA的任何分配开销。
最佳答案
经过挖掘,我找到了答案:
当我开车的时候我可以用
当前->毫米->地图计数
了解当前进程的当前VMA数。
乘以sizeof(struct vm_area_struct)就会得到我想要的东西。
从这里开始,会计就很简单了。