Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ windows任务管理器确定程序内存使用情况的可靠性如何?_C++_Memory Leaks_Profiling_Memory Management - Fatal编程技术网

C++ windows任务管理器确定程序内存使用情况的可靠性如何?

C++ windows任务管理器确定程序内存使用情况的可靠性如何?,c++,memory-leaks,profiling,memory-management,C++,Memory Leaks,Profiling,Memory Management,我可以使用任务管理器检测巨大的内存泄漏吗?我有一个小的文本解析程序,当我启动它时,它显示了大约640K的内存使用量。当我解析一个文件并为其编制索引时,内存使用量会根据文件的大小而增长。然后,当我“清除”索引时,我的内存使用量下降到1400K左右。在这一点之后,我可以添加任意多的文件,当我清除索引时,内存使用率下降到1400k级+或-a~5% 这是在我改变了我的计划之后。在更改之前,每次我索引一些文件然后清除时,内存使用量都会继续增加。所以在多次清除之后,我的程序的内存使用量越来越大 我意识到这可

我可以使用任务管理器检测巨大的内存泄漏吗?我有一个小的文本解析程序,当我启动它时,它显示了大约640K的内存使用量。当我解析一个文件并为其编制索引时,内存使用量会根据文件的大小而增长。然后,当我“清除”索引时,我的内存使用量下降到1400K左右。在这一点之后,我可以添加任意多的文件,当我清除索引时,内存使用率下降到1400k级+或-a~5%

这是在我改变了我的计划之后。在更改之前,每次我索引一些文件然后清除时,内存使用量都会继续增加。所以在多次清除之后,我的程序的内存使用量越来越大


我意识到这可能是一种“黑客”方式来评测我的应用程序,但我是一名学生,我所能找到的都是难以企及的商业评测工具。我也读过关于valgrind的书,它是linux版的,我正在windows上开发。使用任务管理器到底是准确的还是我被误导了?

TaskMgr是一个非常粗糙的工具,但它仍然很有用。如果您的内存泄漏在1兆字节范围内,那么很可能足以说明您有内存泄漏。但是,最终,您将查找10 KB及以下范围内的泄漏,而TaskMgr对此毫无用处。

出于此目的,TaskMgr太粗糙了。特别是如果您有大量的动态分配和释放,这将导致高度碎片化的堆内存,在这种情况下,很难区分泄漏和碎片化导致的堆自然增长。您应该使用win32 API调用来检查应用程序分配的内存总量。几年前,当我仍然存在内存泄漏问题时(由于RAII,我不再有这些问题),我常常在main()的开头放一小段代码,查询堆上分配的内存块总量,然后在main()函数的最后再次查询,如果这两个值不匹配,我会报告一个“X字节内存泄漏”错误


如果您想这样做,可以使用或。前者使用更简单,速度更快,但更粗糙,而后者更精确,但范围更广。

您查看过这篇文章吗?谢谢,我在搜索中没有发现这一点,里面有很好的信息。我仍然想知道使用windows任务管理器来了解应用程序内存使用情况的准确性和可行性,并查看是否存在任何泄漏。您的问题的简单答案是肯定的。任务管理器足够可靠,可以告诉您进程总共需要多少内存。(从操作系统的角度来看)。但它不会提供任何详细信息,也不会帮助您进行调试。在您的情况下,您现在似乎可以使用任务管理器了。但这种方法无法扩展:)谢谢你的提示。目前,我正在寻找的泄漏是相当大的(几个兆)。我正在处理集合和指针,我怀疑在堆上创建的对象根本没有被删除。尽管我相信有几个位置恰当的delete语句,但我仍然无法找出原因。