Windows上C++应用程序的内存使用情况

问题描述:

我有一个应用程序可以进行一些蒙特卡洛模拟。对于每次运行,将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

谢谢大家的提示。事实证明,它实际上是一个内存泄漏导致我的AbstractSensorDataSource类存储加载的数据缺乏虚拟析构函数。

+0

这是唯一可能的原因 - 与MyData的析构函数的问题:)在std :: vector中没有内存泄漏 – 2010-10-15 19:44:01

这实际上听起来是正确的。

90 * 12 = 1080 MB = 1.0546875 GB 

您应该考虑使用另一个分配器或减少轮次数。
如果您想明确释放内存,您应该使用常规指针或调用shared_ptr的reset()函数。
使用一个分析器,就像其他人提到的一样,看看另一个分配器是否实际上对内存分配有积极影响。