Возврат динамически распределенной памяти обратно в ОС без завершения программы
Я работаю над программой, в которой я использую большой, но ограниченный объем памяти. Память выделяется и освобождается во время выполнения в разных потоках. Однако я заметил, что использование памяти программой не останется в указанных пределах. Со временем оно увеличится. Я написал следующий пример программы, чтобы проверить, освобождается ли память обратно в ОС. Половина выделенной памяти была освобождена, чтобы проверить, сократилось ли использование памяти.
int main()
{
char *p[COUNT];
for(int i = 0; i < COUNT; i++)
{
p[i] = new char[1048576];
memset (p[i], 0, 1048576);
printf("%p\n", p[i]);
}
printf("done allocating ... \n");
sleep(10);
printf("Freeing\n");
for(int i; i < COUNT; i++)
{
delete[] p[i];
}
while(1)
sleep(1);
}
После запуска программы казалось, что ОС не вернет освобожденные страницы. Использование памяти остается таким же, как видно из команды "top" в linux, после выделения и после освобождения. Он просто помечает страницы как свободные для повторного использования той же программой. В моей программе malloc и free работают в разных потоках. Это создает проблему управления памятью, когда malloc вызывается намного чаще, чем бесплатно, а сегмент данных процесса становится очень большим, что приводит к тому, что ОС переставляет страницы на диск. Это делает программу и ОС медленными и не отвечает. Есть ли способ для ОС вернуть освобожденную память?