我有一个使用C ++项目的.net项目,并且占用了大量内存。
我想知道是否有快速简便的方法来计算由delete运算符释放的新流出字节和流出字节分配的流入字节数。添加一些日志记录或其他内容。
这两个运算符的源代码由Visual Studio提供,因此我可以破解它。
问题是我可以看到巨大的VM消耗,我想调查原因。我尝试了几个内存分析器,但没有一个可以处理.NET应用程序中的非托管C ++分配
答案 0 :(得分:4)
通常,像 Valgrnid 或 Rational Purify 这样的内存分析工具可以帮助您分析程序的内存利用率。
如果您仍想拥有自己的实施,
您可以通过重载替换全局new
和delete
运算符,在您自己的重载运算符中,您可以维护已分配内存的数量。
如果您选择/被迫遵循第二个选项,则需要注意某些方面,您可以阅读此答案中的详细信息 here 。
如果您使用的是STL:
STL容器类反过来使用全局new
& delete
运营商进行分配。所以如果你替换new
& delete
全局运算符然后STL将使用它们而不是std new和delete运算符。
答案 1 :(得分:1)
您可以使用windbg附加并使用!heap -s
命令开始调查。