У меня проблема с отлаживаемым приложением.Стационарное использование памяти составляет несколько сотен мегабайт.Время от времени (через несколько часов) он попадает в состояние, при котором объем используемой памяти возрастает до нескольких гигабайт.Я хотел бы иметь возможность остановить программу, как только это произойдет с использованием памяти.
Там, где управление проходит через мой собственный код, я могу перехватить чрезмерное использование памяти с помощью такого кода:
bool usingTooMuchMemory()
{
PROCESS_MEMORY_COUNTERS pmc;
if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof pmc))
return pmc.WorkingSetSize > 0x80000000u; // 2GB working set
return false;
}
Это не помогает мне, потому что мне нужно проверить размер рабочего набора в нужной точке.Я действительно хочу, чтобы программа работала с первым malloc
или new
, который принимает рабочий набор или размер кучи выше некоторого порога.И в идеале я хотел бы, чтобы это выполнялось самой кучей CRT с минимальными издержками, потому что библиотеке нравится выделять огромное количество маленьких блоков.
Подозрительный код находится в DLL, работающей в потоке, созданном моимвызывающий код.DLL статически связывается с CRT и не имеет специального управления кучей.У меня есть исходный код для DLL.
Есть идеи?Я что-то упускаю из виду?