2011-11-29 26 views
0

我有簡單的程序,例如在C + +如何在* nix中計算沒有共享庫的進程內存?

#include <iostream> 
int main() 
{ 
    int a = 1000; 
    std::cout << a << std::endl; 
    return 0; 
} 

我試圖計算與GNU時間的內存使用情況。但在「時間」輸出中(使用我的格式無關緊要),內存中進程的最大大小是使用具有printf函數(調用std :: cout)的libc.so計算的,並且等於3.5 Mb。
有沒有一種方法來計算沒有加載共享庫的進程內存?

UPD我不能這樣做,而進程,我想測量,內存運行,有幾個原因。我問,如果有一種方法與外部包裝工具來做到這一點(如time是)

回答

0

pmap工具,或者只是讀取文件/proc/123/maps爲PID 123的過程,/proc/self/maps爲自己的過程中,給你記憶的詳細地圖。然後,您可以忽略關於您不想測量的庫的界限。

嘗試cat /proc/self/maps瞭解更多...(它顯示該cat命令的地圖)。

它是Linux專用的(可能不適用於Solaris或FreeBSD)。

還有更標準的getrusage系統調用(它不區分共享庫使用的內存與其他內存使用)。

+0

我知道'pmap'。在這種情況下,您希望我自己添加內存大小?解析行並只添加我需要的條目?也許有更好的方法(比如'time' util)。我的意思是,我將無法在程序運行時測量內存(因爲我不知道程序將運行多少次) – Ribtoks

+0

爲什麼要刪除共享庫所需的空間?爲什麼這個空間對你特別? –

+0

我正在開發ACM解決方案的競爭對手系統。我需要知道用戶解決方案是否適合內存和時間方面的問題限制。如果用戶的解決方案就像這個問題一樣,實際上它的體積很小(11Kb),但是當調用'printf'時,最大尺寸將是3.5Mb。 – Ribtoks

相關問題