【发布时间】:2015-05-01 05:16:14
【问题描述】:
内存分析是什么意思?
它是否提供内存统计信息,例如使用了多少内存?
这里面有什么不同的种类吗?
【问题讨论】:
-
例如,如果您正在调试一个应用程序并且该应用程序分配内存来创建结构或取消分配内存以释放未使用的结构,您可能想知道哪些结构使用了多少内存并且您可能希望实时监控此信息,例如,以避免由于编程错误而消耗所有可用内存。
内存分析是什么意思?
它是否提供内存统计信息,例如使用了多少内存?
这里面有什么不同的种类吗?
【问题讨论】:
问题是,您可能正在做很多新的事情,即使在带有垃圾收集器的语言中,也可能不必要地支配您的执行时间。 您还可能遇到内存泄漏,这意味着您没有返回到池中的动态内存量会随着时间的推移而稳定增长。 如果你的应用运行时间很长,那同样糟糕。
我使用random-pausing 方法进行性能诊断,但这对于查找内存泄漏没有任何价值。 这就是内存分析应该提供的帮助。
这是我过去使用 MFC 发现内存泄漏的方法。
在调试版本中,当我关闭应用程序时,它会打印所有未收集的内存块的列表,以及它们的类类型。
然后我查看这些块是在哪里创建的,并试图找出它们没有被删除或收集的原因。
如果我可以捕获每个块上的堆栈跟踪会更有用,这样我就可以分辨出哪个new 语句做了它,堆栈可以告诉我原因。
关键是,我可以分配 100 个 Foo 类块,并删除其中的 99 个。
我没有删除的是问题所在,因此了解更多关于它的来源会很有用。
我不知道内存分析器是否可以做到这一点。
【讨论】: