Я нашел много дискуссий в Интернете о том, почему использование оперативной памяти процесса, измеряемое диспетчером задач, часто выше, чем измеряется во время выполнения собственным кодом приложения. Для превосходного ответа об этом, см .: выделение оперативной памяти показывает двойное использование оперативной памяти в диспетчере задач
Однако, как ни странно, я нахожу обратное. Мое измерение внутри приложения, используя GetProcessMemoryInfo
функция, показывает более высокий объем использования оперативной памяти, чем диспетчер задач. Код просто:
#include <iostream>
#include <Windows.h>
#include <psapi.h>int main(void)
{
uint64_t currentUsedRAM(0);
PROCESS_MEMORY_COUNTERS info;
GetProcessMemoryInfo(GetCurrentProcess(), &info, sizeof(info));
currentUsedRAM = info.WorkingSetSize;
const int N(100000000);
int *x = new int[N];
for (int i = 0; i < N; i++)
{
x[i] = 1;
}
GetProcessMemoryInfo(GetCurrentProcess(), &info, sizeof(info));
currentUsedRAM = info.WorkingSetSize - currentUsedRAM;
std::cout << "Current RAM used: " << currentUsedRAM << "\n";
return 0;
}
Вывод «Текущая используемая оперативная память: 400007168», измеряется в байтах (например, около 400 Мб). Тем не менее, в моем диспетчере задач процесс приложения показан как использующий только 381,8 МБ, что примерно на 18 МБ меньше.
Почему это случилось?
Есть ли способ заставить их сходиться к одному и тому же результату?
РЕДАКТИРОВАТЬ:
После ссылки, предложенной в комментариях, я также попробовал Process Explorer программное обеспечение в замене диспетчера задач. При этом измерение составляет 391 892 Мб. Это ближе к тому, что я получаю из измерений в приложении, но все еще довольно плохо.
Еще важнее то, что я попытался увеличить размер массива на один порядок. Интересно, что измерение внутри приложения, измерение диспетчера задач и измерение Process Explorer также увеличиваются на один порядок. Разница между измерениями внутри приложения и этими программами также пропорционально увеличивается и составляет от 18,8 МБ (Диспетчер задач) или 9 МБ (Process Explorer) до 185 МБ (Диспетчер задач) или 102 МБ (Процесс). Explorer).
Задача ещё не решена.
Других решений пока нет …