2013-01-23 110 views

回答

0

我找到了適合我的部分解決方案。

我跑小測試應用程序,並看到pi_dvmprocentry64結構的構件,將如果我們在堆棧分配的存儲器(例如:char arr[1024];)增加對分配對象和一些開銷的大小。 Noiw,我們要計算使用的堆大小。我們應該使用來自malloc.hmallinfo()函數返回mallinfo結構。我們對mallinfo結構的兩個字段感興趣:usmblksuordblks(關於此字段,您可以閱讀here)。一些示例代碼:

pid_t pid = getpid(); 
struct procentry64 p_info; 
if (getprocs64(&p_info, sizeof(p_info), NULL, 0, &pid, 1) < 0) { 
    printf("Error!"); 
} 
proc_size = p_info.pi_dvm*getpagesize() + p_info.pi_tsize; 
struct mallinfo m = mallinfo(); 
proc_size += m.usmblks + m.uordblks; 
return proc_size; // proc_size in bytes 

P.S.我不知道我們爲什麼總結pi_tsize(如果有人知道,請告訴我們)。我從pg_top來源得到這個想法,但是有一個錯誤,它們將pi_tsize乘以4,但它不正確,因爲pi_tsize以字節爲單位。我希望這個解決方案可以幫助某人:)

相關問題