2009-05-14 3 views

答えて

11

これらのリンクから、私が欲しかったのとまったく同じようにしていましたが、ここはそうです。 (ほとんどの難しさは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; 
} 
関連する問題