2008-11-11 93 views

Respuesta

43

Un buen punto de partida sería GetProcessMemoryInfo, que informa varios datos de memoria sobre el proceso especificado. Puede pasar GetCurrentProcess() como manejador de proceso para obtener información sobre el proceso de llamada.

Probablemente el miembro WorkingSetSize de PROCESS_MEMORY_COUNTERS es la combinación más cercana al coupe de Mem Usage en el administrador de tareas, pero no va a ser exactamente el mismo. Experimentaría con los diferentes valores para encontrar el más cercano a tus necesidades.

8

GetProcessMemoryInfo es la función que está buscando. Los documentos en MSDN lo orientarán en la dirección correcta. Obtenga la información que desea de la estructura PROCESS_MEMORY_COUNTERS que ingresa.

Deberá incluir psapi.h.

17

Creo que esto es lo que estaba buscando:

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

// Use to convert bytes to MB 
#define DIV 1048576 

// Use to convert bytes to MB 
//#define DIV 1024 

// Specify the width of the field in which to print the numbers. 
// The asterisk in the format specifier "%*I64d" takes an integer 
// argument and uses it to pad and right justify the number. 

#define WIDTH 7 

void _tmain() 
{ 
    MEMORYSTATUSEX statex; 

    statex.dwLength = sizeof (statex); 

    GlobalMemoryStatusEx (&statex); 


    _tprintf (TEXT("There is %*ld percent of memory in use.\n"),WIDTH, statex.dwMemoryLoad); 
    _tprintf (TEXT("There are %*I64d total Mbytes of physical memory.\n"),WIDTH,statex.ullTotalPhys/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of physical memory.\n"),WIDTH, statex.ullAvailPhys/DIV); 
    _tprintf (TEXT("There are %*I64d total Mbytes of paging file.\n"),WIDTH, statex.ullTotalPageFile/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of paging file.\n"),WIDTH, statex.ullAvailPageFile/DIV); 
    _tprintf (TEXT("There are %*I64d total Mbytes of virtual memory.\n"),WIDTH, statex.ullTotalVirtual/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of virtual memory.\n"),WIDTH, statex.ullAvailVirtual/DIV); 
    _tprintf (TEXT("There are %*I64d free Mbytes of extended memory.\n"),WIDTH, statex.ullAvailExtendedVirtual/DIV); 


} 
+2

Probablemente no es lo que él quería saber, ya que esta memoria de sistema de medida en uso, no la memoria consumida por un proceso individual. Sin embargo, puede ser útil saberlo también, así que no lo marcaré. – CashCow

+1

Fuente: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589%28v=vs.85%29.aspx – user956584

+0

No se trata de esta cuestión, aunque puede ser útil en general. –

1

Para complementar la respuesta de Ronin, indead la función GlobalMemoryStatusEx le da los contadores adecuados para derivar el uso de memoria virtual para el proceso de llamada: simplemente restar ullAvailVirtual desde ullTotalVirtual para obtener la memoria virtual asignada. Puedes verificar esto por ti mismo usando ProcessExplorer o algo así.

Desafortunadamente, la llamada al sistema GlobalMemoryStatusEx tiene un propósito mixto: proporciona información amplia del sistema y específica del proceso, p. Ej. información de memoria virtual.

Cuestiones relacionadas