在C++;Win32 app如何确定专用字节、工作集和虚拟大小 我写一些代码用于教育目的,我希望能够从C++编写的Windows控制台程序中打印这些内存使用值。 < P>花了一点技巧来从这些链接中得到我想要的,但是在这里。(最大的困难是让它

在C++;Win32 app如何确定专用字节、工作集和虚拟大小 我写一些代码用于教育目的,我希望能够从C++编写的Windows控制台程序中打印这些内存使用值。 < P>花了一点技巧来从这些链接中得到我想要的,但是在这里。(最大的困难是让它,c++,winapi,memory-management,C++,Winapi,Memory Management,在C++;Win32 app如何确定专用字节、工作集和虚拟大小 我写一些代码用于教育目的,我希望能够从C++编写的Windows控制台程序中打印这些内存使用值。 < P>花了一点技巧来从这些链接中得到我想要的,但是在这里。(最大的困难是让它在Mingw32中工作。) /-*-编译命令:“g++mem.cpp-lpsapi-g-o mem.exe”-*- //显示内存:进程的专用字节、工作集和虚拟大小 #包括 #包括 #包括 //MingW32在psapi.h中没有此结构 类型定义

在C++;Win32 app如何确定专用字节、工作集和虚拟大小

我写一些代码用于教育目的,我希望能够从C++编写的Windows控制台程序中打印这些内存使用值。

< P>花了一点技巧来从这些链接中得到我想要的,但是在这里。(最大的困难是让它在Mingw32中工作。)

/-*-编译命令:“g++mem.cpp-lpsapi-g-o mem.exe”-*-
//显示内存:进程的专用字节、工作集和虚拟大小
#包括
#包括
#包括
//MingW32在psapi.h中没有此结构
类型定义结构\u进程\u内存\u计数器\u EX{
德沃德cb;
DWORD PageFaultCount;
大小\u T PeakWorkingSetSize;
尺寸工作设置尺寸;
大小“T quotapeakpagedpool用法;
“大小”T quotaPagedPool用法;
大小“T quotapeaknonpagedpool用法;
大小“T quotanopagedpool用法;
大小\u T页面文件使用情况;
大小\u T PeakPagefileUsage;
私人用途的大小;
}进程\内存\计数器\ EX、*P进程\内存\计数器\ EX;
无效打印内存信息(DWORD processID)
{
处理hProcess;
进程\内存\计数器\ pmc;
//打印进程标识符。
printf(“\n进程ID:%u\n”,进程ID);
//打印有关进程内存使用情况的信息。
hproces=OpenProcess(进程\查询\信息|
进程_VM _READ,
FALSE,processID);
if(NULL==hProcess)
返回;
if(GetProcessMemoryInfo(hProcess,(进程内存计数器*)&pmc,sizeof(pmc)))
{
printf(“\t工作集大小:%u\n”,pmc.WorkingSetSize);
printf(“\tPrivate字节:%u\n”,pmc.PrivateUsage);
printf(“\tPagefile(峰值):%u(%u)\n”,pmc.PagefileUsage,pmc.PeakPagefileUsage);
}
CloseHandle(hProcess);
}
int main()
{
DWORD id=GetCurrentProcessId();
PrintMemoryInfo(id);
返回0;
}
// -*- compile-command:"g++ mem.cpp -lpsapi -g -o mem.exe"; -*-

// Shows the memory: private bytes, working set and virtual size for a process 

#include <windows.h> 
#include <stdio.h>
#include <psapi.h>

// MingW32 doesn't have this struct in psapi.h
typedef struct _PROCESS_MEMORY_COUNTERS_EX {
  DWORD  cb;
  DWORD  PageFaultCount;
  SIZE_T PeakWorkingSetSize;
  SIZE_T WorkingSetSize;
  SIZE_T QuotaPeakPagedPoolUsage;
  SIZE_T QuotaPagedPoolUsage;
  SIZE_T QuotaPeakNonPagedPoolUsage;
  SIZE_T QuotaNonPagedPoolUsage;
  SIZE_T PagefileUsage;
  SIZE_T PeakPagefileUsage;
  SIZE_T PrivateUsage;
}PROCESS_MEMORY_COUNTERS_EX, *PPROCESS_MEMORY_COUNTERS_EX;

void PrintMemoryInfo( DWORD processID )
{
    HANDLE hProcess;
    PROCESS_MEMORY_COUNTERS_EX pmc;

    // Print the process identifier.

    printf( "\nProcess ID: %u\n", processID );

    // Print information about the memory usage of the process.

    hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                    PROCESS_VM_READ,
                                    FALSE, processID );
    if (NULL == hProcess)
        return;

    if ( GetProcessMemoryInfo( hProcess, (PROCESS_MEMORY_COUNTERS *) &pmc, sizeof(pmc)) )
    {
        printf( "\tWorkingSetSize: %u\n", pmc.WorkingSetSize );
        printf( "\tPrivate Bytes: %u\n", pmc.PrivateUsage );
        printf( "\tPagefile (peak): %u (%u)\n", pmc.PagefileUsage, pmc.PeakPagefileUsage  );

    }

    CloseHandle( hProcess );
}


int main()
{
    DWORD id = GetCurrentProcessId();

    PrintMemoryInfo(id);

    return 0;
}