我有一個運行在我的計算機上的C代碼程序,我需要檢查程序在運行時使用了多少內存。有什麼工具可以使用嗎?檢查我的程序使用了多少內存
PS:在這種情況下,地塊工具(valgrind
)能夠工作嗎?我已經運行過它,但我不知道如何解釋由它創建的圖形。
PPS:我正在使用Linux(eOs)。
我有一個運行在我的計算機上的C代碼程序,我需要檢查程序在運行時使用了多少內存。有什麼工具可以使用嗎?檢查我的程序使用了多少內存
PS:在這種情況下,地塊工具(valgrind
)能夠工作嗎?我已經運行過它,但我不知道如何解釋由它創建的圖形。
PPS:我正在使用Linux(eOs)。
Massif是一個很棒的工具,可以顯示您的程序隨着時間的推移使用了多少內存。但它有一些缺點:
如果你與你的程序運行的地塊,就可以運行
ms_print massif.out.1234 > output
你沒有本質需要「output'部分,但我發現很容易用更少的解釋結果(或一些其他的文本文件閱讀器),而不僅僅是滾動瀏覽終端歷史記錄。在輸出的頂部,您會看到一段時間內的內存消耗圖。在此之下,您將看到來自任意時間間隔的一些快照,您可以從哪裏找到佔用大部分內存的代碼中的位置。
有一些圖形工具來解釋Massif結果,但我從來沒有覺得我需要它們。研究ms_print的報告,您將學習解釋其結果。
祝你好運!
一種方法是,捕獲所有對堆函數(如malloc,realloc,calloc)的調用,然後總計總大小。如果您的程序中沒有這種機制,那麼您仍然可以在不使用linux的LD_PRELOAD機制來更改程序的情況下執行此操作。你只需要編寫一個小的共享庫, 它具有以下功能
void* malloc (size_t size);
void* calloc (size_t num, size_t size);
void* realloc (void* ptr, size_t size);
然後你就可以實現的功能來捕捉大小
void* malloc (size_t size) {
totalCount += size;
real_malloc (size_t size)
}
的實現細節,你也可以在看以前的答案Overriding malloc with LD_PRELOAD。就我個人而言,我會說在你的程序中執行這個機制,並在內部捕獲調用並計算你分配的內存。
你在什麼操作系統上?無論如何,「top」可以告訴你一個進程正在使用多少內存...... – rogerdpack
你正在使用哪個操作系統? – David