Удаляет ли Erase память кучи, используемую элементом неупорядоченной карты stl? - PullRequest
1 голос
/ 06 января 2020

У меня есть неупорядоченная карта типа int и string, в которую значения вставляются по ссылке. Я хочу удалить некоторые элементы из карты и уменьшить используемую память mallo c, но я не вижу уменьшения памяти. Можно ли уменьшить память Mallo c с помощью стирания? Reha sh поможет после стирания?

typedef typename std::unordered_set<N> ChangeObjSet;
ChangeObjSet _changeObjSet;

template <class N>
void MdmNameCacheImplMIWithStripEscape<N>::insertChangedStatus(const N &obj)
 {
    _changeObjSet.insert(obj);
 }

typename ChangeObjSet::iterator it = _changeObjSet.begin();
   for(;it != _changeObjSet.end();)
    {
     auto s = it;
    it++;
   _changeObjSet.erase(s);
}

Ответы [ 2 ]

2 голосов
/ 06 января 2020

Я использую linux stat stream для получения mallo c memory

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

1 голос
/ 06 января 2020

Если сам элемент хранится на карте (а не указатель), он будет удален при использовании стирания. Если сама карта сокращается после стирания, это может зависеть от реализации используемой вами карты спецификаций c.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...