Windows上C++应用程序的内存使用情况
问题描述:
我有一个应用程序可以进行一些蒙特卡洛模拟。对于每次运行,将12MB文件加载到std::vector<MyData>
中。加载和存储数据的对象由boost::shared_ptr
引用,当运行结束时将从堆栈中删除该对象。我看到应用程序的内存使用量在Windows任务管理器中增长到大约1GB(80-90运行后),但它通常会下降到50MB(并且在下一次运行时开始增长)。所以我想知道这是内存泄漏还是仅仅是正常行为。我/我可以做任何事情明确地释放载体或其他东西的内存?Windows上C++应用程序的内存使用情况
感谢提示,
菲利普
答
谢谢大家的提示。事实证明,它实际上是一个内存泄漏导致我的AbstractSensorDataSource类存储加载的数据缺乏虚拟析构函数。
+0
这是唯一可能的原因 - 与MyData的析构函数的问题:)在std :: vector中没有内存泄漏 – 2010-10-15 19:44:01
答
这实际上听起来是正确的。
90 * 12 = 1080 MB = 1.0546875 GB
您应该考虑使用另一个分配器或减少轮次数。
如果您想明确释放内存,您应该使用常规指针或调用shared_ptr的reset()
函数。
使用一个分析器,就像其他人提到的一样,看看另一个分配器是否实际上对内存分配有积极影响。
很难说没有代码。 – 2010-10-15 10:01:28
我不知道,但也许你应该考虑使用另一个分配器,看看会发生什么。囤积就是一个很好的例子。 (http://prisms.cs.umass.edu/emery/hoard) – 2010-10-15 10:03:46
@the_drow - 如果不完全了解内存使用情况配置文件,您是否真的会替换堆管理器? – 2010-10-15 10:05:33