Я работаю над приложением, которое имеет тенденцию использовать чрезмерное количество памяти, поэтому я бы хотел уменьшить это.
Я знаю, что это возможно для программы Java, добавив параметр Maximum heap size
во время запуска программы Java (например, java.exe ... -Xmx4g
), но здесь я имею дело с исполняемым файлом в системе Windows-10, поэтому это не применимо.
Название этого поста относится к этому URL , в котором упоминается способ сделать это, но также говорится:
Максимальный рабочий набор. Указывает максимальный объем рабочего набора, назначенного процессу. Тем не менее, это число игнорируется Windows , если приложение управления ресурсами не настроило жесткий процесс для этого процесса.
Между тем я могу подтвердить, что следующие строки кода действительно не влияют на использование памяти моей программой:
HANDLE h_jobObject = CreateJobObject(NULL, L"Jobobject");
if (!AssignProcessToJobObject(h_jobObject, OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId())))
{
throw "COULD NOT ASSIGN SELF TO JOB OBJECT!:";
}
JOBOBJECT_EXTENDED_LIMIT_INFORMATION tagJobBase = { 0 };
tagJobBase.BasicLimitInformation.MaximumWorkingSetSize = 1; // far too small, just to see what happens
BOOL bSuc = SetInformationJobObject(h_jobObject, JobObjectExtendedLimitInformation, (LPVOID)&tagJobBase, sizeof(tagJobBase));
=> bSuc
- это true
или есть что-то еще, чего мне следует ожидать?
Кроме того, упомянутые инструменты (приложения, управляемые ресурсами, такие как Hyper-V), похоже, не работают в моей системе Windows-10.
Рядом с этим, похоже, есть еще один пост на эту тему "Есть ли способ заставить рабочий набор процесса быть 1 ГБ в C ++?" , но здесь результаты кажутся отрицательными тоже.
Для хорошего понимания: я работаю в C ++, поэтому решение, предложенное в , этот URL не применимо.
Так что теперь я застрял с простым вопросом: существует ли способ, реализуемый в C ++, ограничить использование памяти текущим процессом, работающим в Windows-10?
У кого-нибудь есть идея?
Заранее спасибо