擦除是否删除 stl 无序列图元素使用的堆内存

Does Erase deletes heap memory used by element of stl unordered map

本文关键字:内存 元素 图元 删除 是否 stl 无序 擦除      更新时间:2023-10-16

我有一个 int 和字符串的无序映射,其中的值通过引用插入其中。我想从地图中删除一些元素并减少使用的 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);
}

我正在使用 linux stat 流来获取 malloc 内存

操作系统分配给进程的内存不一定与当前使用的内存相同。为每个被删除的对象将内存释放回操作系统将是非常低效的。在进程终止之前,您可能会看到分配给进程的内存不会减少。

如果项目本身存储在地图中(而不是指针(,则在使用擦除时将删除它。 如果擦除后地图本身缩小,则可能取决于您使用的特定地图的实现。

一些实现可能会对新插入的项目重用以前删除的表条目,尽管我认为大多数实现不会。您是否正在使用性病库?