擦除会删除stl无序映射的元素使用的堆内存

问题描述 投票:0回答:2

我有一个int和string的无序映射,通过引用将值插入到其中。我想从map中删除一些元素并减少所使用的malloc内存,但是我看不到内存的减少。是否可以使用擦除减少malloc内存?擦除后会重新哈希帮助吗?

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);
}
c++ stl unordered-map erase
2个回答
0
投票
某些实现可能会将以前擦除的表条目重新用于新插入的项目,尽管我认为大多数实现不会。您正在使用STD库吗?

0
投票
我正在使用linux stat流获取malloc内存
由操作系统分配给您的进程的内存不一定与您当前正在使用的内存相同。为每个要删除的对象释放内存的效率极低。您可能看不到分配给进程的内存,直到它终止为止。
© www.soinside.com 2019 - 2024. All rights reserved.