Почему любое значение из счетчика памяти процесса не похоже на значение используемой памяти, показанное в диспетчере задач? - PullRequest
0 голосов
/ 27 июня 2018

Счетчик памяти процесса - это определенная структура, доступная в psapi (API статуса процесса). Его структура определяется как

typedef struct _PROCESS_MEMORY_COUNTERS {
  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;
} PROCESS_MEMORY_COUNTERS;

Я использую метод GetProcessMemoryInfo, который имеет синтаксис, BOOL GetProcessMemoryInfo(HANDLE Process, PROCESS_MEMORY_COUNTERS* pmc,DWORD size_pmc);

Из указателя структурной переменной pmc я могу получить доступ к WorkingSetSize процесса (скажем, mspaint.exe) как pmc.WorkingSetSize.

Но значение памяти, отображаемое в диспетчере задач, не совпадает ни с одним из значений в structre. Мои вопросы,

  1. Что это за значения?
  2. Какое значение отображается в диспетчере задач?
  3. Как программно можно использовать память, отображаемую в диспетчере задач?
  4. Можно ли рассчитать с помощью самого счетчика памяти процесса?

PS: предпочтительным языком является C ++, и я хочу сделать это без выполнения каких-либо команд в командной строке.

...