Cómo obtener el uso de memoria en Windows en C ++

Estoy tratando de averiguar cuánta memoria consume mi aplicación dentro del progtwig mismo. El uso de memoria que estoy buscando es el número informado en la columna “Uso de Mem” en la pestaña Procesos del Administrador de tareas de Windows.

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 sea ​​la coincidencia más cercana con el atributo 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.

Creo que esto es lo que estabas buscando:

 #include #include #include // 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); } 

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.

Necesitarás incluir psapi.h.

Intente echar un vistazo a GetProcessMemoryInfo . No lo he usado, pero parece lo que necesitas.

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

Es confuso que la llamada al sistema GlobalMemoryStatusEx desafortunadamente tiene un propósito mixto: proporciona información tanto del sistema como del proceso, por ejemplo, información de la memoria virtual.