计算“新”和“删除”字节

时间:2011-08-04 12:13:24

标签: .net c++ memory-management memory-leaks new-operator

我有一个使用C ++项目的.net项目,并且占用了大量内存。

我想知道是否有快速简便的方法来计算由delete运算符释放的新流出字节和流出字节分配的流入字节数。添加一些日志记录或其他内容。

这两个运算符的源代码由Visual Studio提供,因此我可以破解它。

问题是我可以看到巨大的VM消耗,我想调查原因。我尝试了几个内存分析器,但没有一个可以处理.NET应用程序中的非托管C ++分配

2 个答案:

答案 0 :(得分:4)

通常,像 Valgrnid Rational Purify 这样的内存分析工具可以帮助您分析程序的内存利用率。

如果您仍想拥有自己的实施, 您可以通过重载替换全局newdelete运算符,在您自己的重载运算符中,您可以维护已分配内存的数量。

如果您选择/被迫遵循第二个选项,则需要注意某些方面,您可以阅读此答案中的详细信息 here

如果您使用的是STL:
STL容器类反过来使用全局new& delete运营商进行分配。所以如果你替换new& delete全局运算符然后STL将使用它们而不是std new和delete运算符。

答案 1 :(得分:1)

您可以使用windbg附加并使用!heap -s命令开始调查。