Почему функция free () не возвращает память операционной системе? - PullRequest
0 голосов
/ 20 сентября 2018

Когда я использую верхнюю терминальную программу в Linux, я не вижу результат free.

Мои ожидания:

  1. бесплатная карта и список.

  2. Использование памяти, которое я вижу вверху (функция Linux) или /proc/meminfo, становится меньше, чем в прошлом.

  3. сон запускается.

  4. выход из программы.

Но использование памяти уменьшается только после завершения программы.

Не могли бы вы объяснить логику свободных функций?

Ниже приведен мой код.

for(mapIter = bufMap->begin(); mapIter != bufMap -> end();mapIter++)
{
    list<buff> *buffList = mapIter->second;
    list<buff>::iterator listIter;
    for(listIter = buffList->begin(); listIter != buffList->end();listIter++)
    {
        free(listIter->argu1);
        free(listIter->argu2);
        free(listIter->argu3);
    }
    delete buffList;
}
delete bufMap;

printf("Free Complete!\n");

sleep(10);
printf("endend\n");

Спасибо.

1 Ответ

0 голосов
/ 20 сентября 2018

Память распределяется на кучу .

Когда вы запрашиваете память в вашей программе (с помощью new () или malloc () и т. Д.), Ваша программа запрашивает некоторую память из своей кучи, которая, в свою очередь, запрашивает ее из операционной системы {1}.Поскольку это дорогостоящая операция, она получает часть памяти от ОС, а не только то, что вы просите.Менеджер памяти помещает все, что попадает в кучу, просто возвращая вам, возможно, небольшую сумму, которую вы просили.Когда вы освобождаете () или удаляете () эту память, она просто возвращается в кучу, а не в ОС.

Абсолютно нормально, что эта память не возвращается в операционную систему до тех пор, пока ваша программа не выйдет, так какпозже вы можете запросить дополнительную память.

Если дизайн вашей программы основан на том, что эта память будет переработана, это может быть достигнуто при использовании нескольких копий вашей программы (с помощью fork () ~ ing), которые запускаются и завершаются.

{1} Возможно, куча не пустая при запуске программы, но при условии, что она не иллюстрирует мою точку зрения.

...