我有一个指向正在运行的进程的指针。我想知道该过程占用了多少物理内存。
我尝试了这个但是我得到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
返回字节对吗?有没有更简单的方法来计算它?
答案 0 :(得分:0)
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;