Возврат динамически распределенной памяти обратно в ОС без завершения программы

Я работаю над программой, в которой я использую большой, но ограниченный объем памяти. Память выделяется и освобождается во время выполнения в разных потоках. Однако я заметил, что использование памяти программой не останется в указанных пределах. Со временем оно увеличится. Я написал следующий пример программы, чтобы проверить, освобождается ли память обратно в ОС. Половина выделенной памяти была освобождена, чтобы проверить, сократилось ли использование памяти.

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 вызывается намного чаще, чем бесплатно, а сегмент данных процесса становится очень большим, что приводит к тому, что ОС переставляет страницы на диск. Это делает программу и ОС медленными и не отвечает. Есть ли способ для ОС вернуть освобожденную память?

Ответы на вопрос(2)

Ваш ответ на вопрос