4
私は教育目的でいくつかのコードを書いています。これらのメモリ使用量をプリントアウトするには、 C++。C++のWin32アプリケーションでは、プライベートバイト、ワーキングセット、および仮想サイズをどのように決めることができますか。
私は教育目的でいくつかのコードを書いています。これらのメモリ使用量をプリントアウトするには、 C++。C++のWin32アプリケーションでは、プライベートバイト、ワーキングセット、および仮想サイズをどのように決めることができますか。
これらのリンクから、私が欲しかったのとまったく同じようにしていましたが、ここはそうです。 (ほとんどの難しさは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;
}