Как получить использование памяти под Windows на С++

Я пытаюсь выяснить, сколько памяти мое приложение потребляет из самой программы. Использование памяти, которую я ищу, - это номер, указанный в столбце "Использование памяти" на вкладке "Процессы" диспетчера задач Windows.

Ответ 1

Хорошей отправной точкой будет GetProcessMemoryInfo, в котором сообщается информация о памяти о указанном процессе. Вы можете передать GetCurrentProcess() в качестве дескриптора процесса, чтобы получить информацию о вызывающем процессе.

Вероятно, член WorkingSetSize PROCESS_MEMORY_COUNTERS является самым близким совпадением с кубком Mem Usage в диспетчере задач, но он не будет точно таким же. Я бы экспериментировал с разными значениями, чтобы найти тот, который наиболее близок к вашим потребностям.

Ответ 2

Я думаю, что это то, что вы искали:

#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);


}

Ответ 3

GetProcessMemoryInfo - это функция, которую вы ищете. Документы в MSDN укажут вам в правильном направлении. Получите информацию, которую вы хотите, из структуры PROCESS_MEMORY_COUNTERS, в которую вы проходите.

Вам нужно будет включить psapi.h.

Ответ 4

Попробуйте взглянуть на GetProcessMemoryInfo. Я не использовал его, но он выглядит так, как вам нужно.

Ответ 5

В дополнение к ответу Ронина, indead функция GlobalMemoryStatusEx дает вам правильные счетчики для получения использования виртуальной памяти для вызывающего процесса: просто вычитайте ullAvailVirtual из ullTotalVirtual, чтобы получить выделенную виртуальную память. Вы можете проверить это для себя, используя ProcessExplorer или что-то в этом роде.

Сложно предположить, что системный вызов GlobalMemoryStatusEx, к сожалению, имеет смешанную цель: он предоставляет как системную, так и специфическую для процесса информацию, например. информации виртуальной памяти.