Как получить использование памяти под Windows в C ++ - PullRequest
43 голосов
/ 12 ноября 2008

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

Ответы [ 5 ]

45 голосов
/ 12 ноября 2008

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

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

19 голосов
/ 14 декабря 2011

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

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


}
8 голосов
/ 12 ноября 2008

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

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

7 голосов
/ 12 ноября 2008

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

2 голосов
/ 07 февраля 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...