Memory 是否有任何工具可以使用malloc/realloc查找动态分配的内存大小?
我有一个MS Visual Studio 2005工作区,其中包含所有c代码。此应用程序(exe)使用malloc和realloc从堆中动态分配内存。我想在运行特定测试用例时,使用malloc/realloc计算此应用程序在堆上分配的最大大小 我不想通过记录malloc大小并累加来更改代码,因为: a) 可能有一种情况,一些1KB的内存被malloc'ed,然后被释放,然后一个2KB的内存被malloc'ed。所以max是2KB,我需要得到它的值,而不是1+2=3KB 因此,我必须真正了解malloc/free在代码中的位置,并为此添加代码,这是我想要避免的 1) 那个么,是否有任何工具(免费软件/许可)可以使用malloc/realloc查找动态分配的最大或总内存大小 2) 微软VisualStudio2005/2008本身是否提供了类似的功能 谢谢Memory 是否有任何工具可以使用malloc/realloc查找动态分配的内存大小?,memory,dynamic,size,allocation,Memory,Dynamic,Size,Allocation,我有一个MS Visual Studio 2005工作区,其中包含所有c代码。此应用程序(exe)使用malloc和realloc从堆中动态分配内存。我想在运行特定测试用例时,使用malloc/realloc计算此应用程序在堆上分配的最大大小 我不想通过记录malloc大小并累加来更改代码,因为: a) 可能有一种情况,一些1KB的内存被malloc'ed,然后被释放,然后一个2KB的内存被malloc'ed。所以max是2KB,我需要得到它的值,而不是1+2=3KB 因此,我必须真正了解mal
-我建议如下:
malloc/realloc
调用替换为您自己执行分析的函数调用malloc/realloc
我建议如下:
malloc/realloc
调用替换为您自己执行分析的函数调用malloc/realloc
VS有许多堆调试工具,例如
\u heapwalk
,可以让您遍历堆并获取堆上块的信息。您需要做的大部分工作是确定堆何时处于最大使用状态,以便知道何时对其进行遍历并找到其大小。VS有许多堆调试工具,如\u heapwalk
,这些工具将允许您遍历堆并获取堆上块的信息。您需要做的大部分工作是确定堆何时处于最大使用状态,以便知道何时遍历堆并找到其大小。如果静态链接到CRT,您可以“否决”malloc、realloc、free(实际上,CRT中malloc.c、realloc、c free.c和/或dbgheap.c中出现的所有函数)的实现。这是可行的,但可能需要一些迭代才能得到需要否决的完整函数集
如果您与CRT动态链接,您可以重新定义malloc、realloc和free,如下所示:
#define malloc(s) mymalloc(s)
#define realloc(p,s) myrealloc(p,s)
#define free(p) myfree(p)
mymalloc、myrealloc和myfree的实现可以简单地使用malloc、realloc和free(确保不要使用实现mymalloc的源文件中的#define,…),也可以使用本机Windows函数。如果静态链接CRT,可以“否决”malloc、realloc、free的实现(事实上,CRT中malloc.c、realloc、c free.c和/或dbgheap.c中出现的所有函数)这是可行的,但可能需要一些迭代才能得到需要否决的完整函数集 如果您与CRT动态链接,您可以重新定义malloc、realloc和free,如下所示:
#define malloc(s) mymalloc(s)
#define realloc(p,s) myrealloc(p,s)
#define free(p) myfree(p)
mymalloc、myrealloc和myfree的实现可以简单地使用malloc、realloc和free(确保不要使用实现mymalloc的源文件中的#define,…),也可以使用本机Windows函数。内存验证器可以做到这一点 您会发现有几种不同的报告很有用:
- 运行总计。这是一个对话框,提供每个主内存分配器(C运行时、HeapAlloc、LOCALLOC、GlobalAlloc、CoTaskMemAlloc等)的当前、累积和总计值
- 对象。这是一个主要选项卡,显示对象类型、大小、计数和累积。 还包括每个线程和每个dll值的子选项卡
- 大小。这是一个主要选项卡,显示大小、计数和累积。 还包括每个线程和每个dll值的子选项卡
- 虚拟。它显示内存的图形视图(一个像素==一页内存),并具有子选项卡,显示虚拟内存页和虚拟内存段落的详细虚拟内存数据
完全披露:我是内存验证器团队的一员。内存验证器可以做到这一点 您会发现有几种不同的报告很有用:
- 运行总计。这是一个对话框,提供每个主内存分配器(C运行时、HeapAlloc、LOCALLOC、GlobalAlloc、CoTaskMemAlloc等)的当前、累积和总计值
- 对象。这是一个主要选项卡,显示对象类型、大小、计数和累积。 还包括每个线程和每个dll值的子选项卡
- 大小。这是一个主要选项卡,显示大小、计数和累积。 还包括每个线程和每个dll值的子选项卡
- 虚拟。它显示内存的图形视图(一个像素==一页内存),并具有子选项卡,显示虚拟内存页和虚拟内存段落的详细虚拟内存数据