在Windows下查找程序在c中使用的总内存

我在c中有一个小程序

#include  #include  #define SIZE 30 int main() { char name[ SIZE ]; FILE *fpPtr; if ( ( fpPtr = fopen( "sorted_file.txt", "r" ) ) == NULL ) { printf( "File could not be opened\n" ); } else { printf( "%s\n", "Name" ); fscanf( fpPtr, "%s", name ); while( !feof( fpPtr ) ) { printf( "%s\n", name ); fscanf( fpPtr, "%s", name ); } fclose( fpPtr ); } return 0; }; 

我想知道这个程序使用了多少内存。 我应添加的任何代码或函数,以查找此程序使用的总内存。 我不想为此检查任务管理器。 我需要打印内存使用情况。

这听起来像是在GetProcessMemoryInfo()

您需要Windows SDK或mingw32中相应的Windows标头才能编译它(也可以在Visual Studio中使用,以及使用适当的库的cygwin等):

 #include  // these header gives you access to the Windows API - #include  // include at the top of your code // do this where you need to get that information - perhaps create a function // for it. HINSTANCE hProcHandle = GetModuleHandle(NULL); // get the current process handle PROCESS_MEMORY_COUNTERS_EX memory; // output will go here. /* call function */ GetProcessMemoryInfo(hProcHandle, &memory, sizeof(memory)); 

您现在应该能够访问memory.WorkingSetSizememory.WorkingSetSize ,无论哪种方法对您很重要。 这些是size_t类型,它们是大小取决于系统的无符号整数。

你刚才在这里问过这个问题,我给了你这个答案:

虽然它不再被积极开发,但对于C和ObjC代码(我用过它),我没有找到比MSS更好的东西:内存监控系统 。

它非常简单易用; 我的经验非常准确,我已经用它来清除我的应用程序中的任何内存泄漏。

为了让您了解它的易用性:我将其编译成静态库,将其链接到我的程序的调试目标,并将singular头的include(导入为ObjC)放入一个公共共享头中,其余的都是我的程序使用,所以它跟踪整个程序的内存,甚至不需要考虑它。

MSS将完全按照您的要求行事; 它还会为您提供大量额外(非常有用)的信息,但报告的顶部包含以下内容:

 MSG: Listing info about allocated blocks at end of program: INFO: 107 blocks currently allocated INFO: 11720 bytes of memory currently used. INFO: 2384479 bytes maximum memory used. 

在这些行中,它会告诉您泄漏了多少内存块,确切泄漏了多少内存以及程序使用的最大内存占用量。

如何使用MSS:

首先使用makefile构建库; 只需使用make lib因为我们不需要测试程序。 如果您没有使用gcc,则需要更改makefile中的默认编译器。 如果您正在使用gcc并且想要64位和32位版本,请将-m64-m32添加到第53行CFLAGS=...然后在文件上运行make

您现在应该有一个静态的MSS库,您可以将其链接到您的程序中。 您需要在程序中包含的唯一标头是mss.h 要实际使用MSS,您需要将#define MSS#include 到您希望跟踪的每个文件中。 如果要跟踪整个程序,请在编译器的参数中定义MSS,并将其包含在每个源文件包含的通用标头中。

这就是字面意思; 如果您希望更改其日志和其他function的详细程度,可以添加到程序目录中的配置文件,但要使其正常工作,这就是您需要做的全部工作。 顺便说一下,MSS在其doc文件夹中包含一个完整的读取文件,更详细地描述了所有这些内容。