0
我使用C++在AIX 5.3上編寫應用程序。我想獲得當前大小的進程虛擬內存。我使用getprocs64
函數,但有了這個數據我不能得到結果,如svmon
所示。 請幫幫我。獲得程序中AIX進程的虛擬內存大小
謝謝。
我使用C++在AIX 5.3上編寫應用程序。我想獲得當前大小的進程虛擬內存。我使用getprocs64
函數,但有了這個數據我不能得到結果,如svmon
所示。 請幫幫我。獲得程序中AIX進程的虛擬內存大小
謝謝。
我找到了適合我的部分解決方案。
我跑小測試應用程序,並看到pi_dvm
,procentry64
結構的構件,將如果我們在堆棧分配的存儲器(例如:char arr[1024];
)增加對分配對象和一些開銷的大小。 Noiw,我們要計算使用的堆大小。我們應該使用來自malloc.h
的mallinfo()
函數返回mallinfo
結構。我們對mallinfo
結構的兩個字段感興趣:usmblks
和uordblks
(關於此字段,您可以閱讀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
以字節爲單位。我希望這個解決方案可以幫助某人:)