计算进程的内存使用情况

时间:2014-04-01 06:02:14

标签: c memory process linux-kernel

我有一个指向正在运行的进程的指针。我想知道该过程占用了多少物理内存。

我尝试了这个但是我得到0作为返回值。

unsigned long mem_usage(struct task_struct *process)
{   
    return process->mm->total_vm/2048 * 100000; // this is wrong vm means virtual memory.
}

process->mm->total_vm返回字节对吗?有没有更简单的方法来计算它?

1 个答案:

答案 0 :(得分:0)

根据mm_types.h

unsigned long total_vm; /* Total pages mapped */

页面中的尺寸

这意味着,如果您想要以字节为单位的大小,则必须将页面转换为字节

total_vm << PAGE_SHIFT

更新

将字节转换为页面的反向方式是

pages = bytes >> PAGE_SHIFT;

但这仅适用于整页。如果bytes是某些页面加上一些剩余字节,则必须增加页数或

pages = (bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;

只需2 GiB,这就是

pages_2gb = (2 * 1024 * 1024 * 1024) >> PAGE_SHIFT;