2014-04-01 45 views
2

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

我试过这个,但我得到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

这是Linux内核?如果是这样的话,那可能是一个标签。另外,请尝试颠倒操作顺序。 'process-> mm-> total_vm * 100000/2048' – immibis

+0

是的。当我扭转时只是挂起。那是我第一次尝试。 – CharlieK

回答

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; 
+0

我如何在页面中表示2GB?我认为这会更容易。 – CharlieK

+1

这是一个不同的问题。为什么会更容易? –

相关问题