2011-04-20 56 views
4

我可以使用任務管理器來檢測巨大的內存泄漏嗎?我有一個小文本解析程序,當我啓動它時顯示大約640K的內存使用情況。當我解析一個文件並對其進行索引時,內存使用量會隨着文件的大小而增長。然後,當我「清除」索引時,我的內存使用量下降到大約1400K。在這之後,我可以添加儘可能多的文件,並且在清除索引時,內存使用率會下降到這個1400k + +或 - 5%。用於確定程序的內存使用情況的Windows任務管理器有多可靠?

這是後我做了我的程序的改變。在更改之前,每次我對一些文件進行索引並清除後,內存使用量會繼續增加。所以經過多次清理之後,我的程序的內存使用量不斷增長。

我意識到這可能是一個「的hackish」的方法來分析我的應用程序,但我是一個學生,所有我能找到的商業分析工具,是遙不可及的。我也讀過關於valgrind的內容,它只是Linux,我正在開發Windows。是使用任務管理器準確還是誤導?

+0

你看着這個http://stackoverflow.com/questions/67554/whats-the-best-free-c-profiler-for-windows-if-there-are – 2011-04-20 17:14:40

+0

謝謝,我沒有遇到過在我的搜索和那裏有很好的信息。我仍然想知道使用Windows任務管理器來了解應用程序的內存使用情況並查看是否有任何泄漏的準確性和可行性。 – Pete 2011-04-20 17:17:29

+0

簡單回答你的問題是。任務管理器足夠可靠地告訴我們總共需要多少內存(從操作系統的角度來看),但它不會提供任何細節的細節,並幫助你進行調試。在你的情況下,它看起來像你沒有任何問題經理現在。但該方法不會縮放:) – 2011-04-20 17:20:30

回答

5

TaskMgr是一個非常原始的工具,但它仍然是有用的。如果你在1兆字節範圍內有內存泄漏,那麼可能足以說明你擁有它們。但是,最終,你會在10千字節和低於範圍內尋找泄漏,而TaskMgr對於那些人來說是無用的。

+0

感謝您的提示。目前,我正在尋找的泄漏非常大(幾megs)。我正在使用集合和指針,我懷疑在堆上創建的對象根本沒有被刪除。我仍然無法找出原因,儘管我相信這是一些很好的刪除語句。 – Pete 2011-04-20 17:21:56

6

的TaskMgr的方式,對於這個目的太粗糙了。特別是如果你有很多動態分配和釋放會導致高度分散的堆內存,在這種情況下,很難區分由於碎片造成的泄漏和堆的自然增長。您應該使用win32 API調用來檢查應用程序分配的內存總量。幾年前,當我用還是有內存泄漏問題(沒有這些了感謝RAII),我習慣把在main()的一小塊代碼,用於查詢總量的開始內存塊分配在堆上,然後在main()函數的最後再次查詢它,如果這兩個值不匹配,那麼我會在此報告「內存泄漏X字節」錯誤。

如果你想做到這一點,您可以使用GlobalMemoryStatuxExHeapWalk。前者使用更簡單,速度更快,但更粗糙,而後者更精確,但更廣泛。

相關問題