2014-04-01 81 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

這是一個不同的問題。爲什麼會更容易? –

相關問題