Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/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
Visual studio 2008 如何确定哪个C/C++;对象使用的内存最多_Visual Studio 2008_Debugging_Mixed Mode_Visual C++ 2008 - Fatal编程技术网

Visual studio 2008 如何确定哪个C/C++;对象使用的内存最多

Visual studio 2008 如何确定哪个C/C++;对象使用的内存最多,visual-studio-2008,debugging,mixed-mode,visual-c++-2008,Visual Studio 2008,Debugging,Mixed Mode,Visual C++ 2008,我有一个混合模式的应用程序(托管和本机),它占用了大量内存。我已经发现大部分内存是由本机代码分配的。我说的不是内存泄漏,而是在程序启动后很早就出现的内存消耗高,然后相对稳定 您是否知道有任何工具可以向您显示哪些C/C++对象使用的内存最多? 我已经尝试过DebugDiag 1.1和SoftwareVerify的内存验证器,但是这两个工具都没有提供足够的信息来识别C/C++对象 问候 弗兰克在这方面做得很好。这是我尝试过的少数几个使用同一探查器处理本机代码和托管代码的探查器之一,包括支持混合模式程

我有一个混合模式的应用程序(托管和本机),它占用了大量内存。我已经发现大部分内存是由本机代码分配的。我说的不是内存泄漏,而是在程序启动后很早就出现的内存消耗高,然后相对稳定

您是否知道有任何工具可以向您显示哪些C/C++对象使用的内存最多? 我已经尝试过DebugDiag 1.1和SoftwareVerify的内存验证器,但是这两个工具都没有提供足够的信息来识别C/C++对象

问候

弗兰克在这方面做得很好。这是我尝试过的少数几个使用同一探查器处理本机代码和托管代码的探查器之一,包括支持混合模式程序集。

我能推荐一种更“核心”的方法吗

WinDbg的!heap命令可以揭示许多关于本机堆的重要信息。 首先执行以下步骤:

A.启动GFlags,转到“图像文件”选项卡,键入进程名称,然后按tab键

B.按“启用页面堆”和“创建用户模式堆栈跟踪数据库”,然后按OK

开始你的过程

执行上述步骤将告诉windows收集有关进程的内存分配信息。我们稍后将使用此信息

重要提示:收集这些信息将使您的应用程序使用更多内存,并且可能会更慢。windows将在每次运行进程时继续收集此信息,直到;我将通过启动GFlags并删除您的选择来告诉它

将WinDbg连接到应用程序并设置正确的符号。除了你自己的符号,你还需要微软的符号。使用.symfix命令,然后使用.reload/f使WinDbg从microsoft的符号服务器下载正确的符号(可能需要几分钟)

设置完所有符号后,执行以下步骤:

A!heap-stat-查看所有进程堆的使用摘要

B.选择一个堆进行检查。如果您正在寻找大型对象,具有最高提交字节的对象将是一个很好的候选对象

C!heap-stat-h“heap handle”-查看堆的分配统计信息。在输出中,您将发现为每个分配大小分配了多少块

D.选择一个较大的分配大小并使用!heap-flt s“size”转储相同大小的所有堆条目

E!heap-p-a“UserPtr”将打印分配堆栈(以及其他信息)。如果不使用GFlags设置“启用页面堆”,则此信息将不可用

就是这样,使用调用堆栈中的信息并查看源代码来识别那些大对象

B.T.W

如果尚未安装Windows调试工具包,可以从下载

也许这种方法不像您预期的那么简单,但它确实有效:)
玩得开心

我尝试过AQtime,但它似乎在混合模式应用程序中存在问题。我已经尝试过几种不同的程序(包括简单的“Hello,world”类型的程序),但是当AQtime访问它们时,它们会崩溃。我已经联系了制造商的支持HRM。这对我来说很好。我只尝试过以x86为目标的混合模式应用程序-也许就是这样?WinDbg似乎没有说出进程内存的全部真相:根据Windows任务管理器,我的进程有121 MB的提交内存。“!heap-s”表示提交的内存为33 MB,“!heap-stat”表示提交的内存为2.3 MB。