2011-04-07 59 views
1

我正在維護一個程序,它在啓動時使用600 + MB內存,什麼都不做!有什麼辦法可以知道線程使用了多少內存?

我想知道有多少MEM由每個線程使用,可以用gdb做這項工作?

+0

第一個問題是:你怎麼知道它是使用600MB?你可能在看錯誤的東西。 – 2011-04-07 03:34:27

+3

線程共享全局堆空間。一個線程的唯一本地數據是它的堆棧和線程局部變量。 – 2011-04-07 04:42:45

回答

2

valgrind --tool=massif是正確的解決方案。它會給你所有關於哪個線程在什麼時間點使用多少內存的信息。

2

我認爲像IBM/Rational Purifyvalgrind內存分析工具可能是你所需要的。

另外,如果你的程序在啓動時使用600MB,你應該首先檢查你的依賴庫正在做的,一旦他們得到加載。你甚至可能還沒有輸入main(),但他們可能正在創建一些重量級的全局靜態對象,它們在事情開始之前就被初始化了。

另一件事要記住的是,每個線程會得到很多的分配給它一個它堆棧存儲器。它可能是一個兆字節或更多的線程,所以如果你自己創建600個線程,那麼600Mb已經消失了。

+0

是的,它確實是由依賴於... thx的庫引起的 – qiuxiafei 2011-04-07 14:00:07

相關問題