【问题标题】:Memory usage of C++ application on WindowsWindows 上 C++ 应用程序的内存使用情况
【发布时间】:2010-10-15 09:56:59
【问题描述】:

我有一个应用程序可以进行蒙特卡罗模拟。每次运行时,都会将一个 12MB 的文件加载到 std::vector<MyData> 中。加载和存储数据的对象由 boost::shared_ptr 引用,当运行结束时,该对象会从堆栈中删除。

我在 Windows 任务管理器中看到应用程序的内存使用量增长到大约 1GB(在运行 80-90 次之后),但它通常会下降到 50MB(并开始增长以用于下一次运行)。所以我想知道这是内存泄漏还是只是正常行为。我应该/我可以做些什么来明确释放向量中的内存或其他东西吗?

感谢提示,

菲利普

【问题讨论】:

  • 我不知道,但也许你应该考虑使用另一个分配器,看看会发生什么。霍德就是一个很好的例子。 (prisms.cs.umass.edu/emery/hoard)
  • @the_drow - 你真的会在不完全了解内存使用情况的情况下替换堆管理器吗?
  • @Steve:不,不是真的。但是使用和不使用分析可以让您了解到底发生了什么。

标签: c++ windows memory-leaks


【解决方案1】:

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

【讨论】:

  • 这是唯一可能的原因 - MyData 的析构函数有问题 :) std::vector 中没有内存泄漏
【解决方案2】:

这听起来很对。

90 * 12 = 1080 MB = 1.0546875 GB

您应该考虑使用另一个分配器或减少轮数。
如果您想显式释放内存,您应该使用常规指针或调用 shared_ptr 的 reset() 函数。
正如其他人提到的那样,使用分析器来查看另一个分配器是否真的对内存分配有积极影响。

【讨论】:

    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2023-03-30
    • 2011-03-09
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多