2010-10-15 90 views
0

我有一個應用程序可以進行一些蒙特卡洛模擬。對於每次運行,將12MB文件加載到std::vector<MyData>中。加載和存儲數據的對象由boost::shared_ptr引用,當運行結束時將從堆棧中刪除該對象。我看到應用程序的內存使用量在Windows任務管理器中增長到大約1GB(80-90運行後),但它通常會下降到50MB(並且在下一次運行時開始增長)。所以我想知道這是內存泄漏還是僅僅是正常行爲。我/我可以做任何事情明確地釋放載體或其他東西的內存?Windows上C++應用程序的內存使用情況

感謝提示,

菲利普

+4

很難說沒有代碼。 – 2010-10-15 10:01:28

+0

我不知道,但也許你應該考慮使用另一個分配器,看看會發生什麼。囤積就是一個很好的例子。 (http://prisms.cs.umass.edu/emery/hoard) – 2010-10-15 10:03:46

+0

@the_drow - 如果不完全瞭解內存使用情況配置文件,您是否真的會替換堆管理器? – 2010-10-15 10:05:33

回答

1

謝謝大家的提示。事實證明,它實際上是一個內存泄漏導致我的AbstractSensorDataSource類存儲加載的數據缺乏虛擬析構函數。

+0

這是唯一可能的原因 - 與MyData的析構函數的問題:)在std :: vector中沒有內存泄漏 – 2010-10-15 19:44:01

0

這實際上聽起來是正確的。

90 * 12 = 1080 MB = 1.0546875 GB 

您應該考慮使用另一個分配器或減少輪次數。
如果您想明確釋放內存,您應該使用常規指針或調用shared_ptr的reset()函數。
使用一個分析器,就像其他人提到的一樣,看看另一個分配器是否實際上對內存分配有積極影響。

相關問題