In a C ++ Win32 application, how can I define private bytes, working set and virtual size

I am writing code for educational purposes, and I would like to be able to print these memory usage values ​​from a Windows console program written in C ++.

+4
source share
1 answer

I played a little to get what I wanted from these links, but here it is. (Most of the difficulty was getting him to work on Mingw32.)

// -*- 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; } 
+11
source

All Articles