擦除是否删除 stl 无序列图元素使用的堆内存
Does Erase deletes heap memory used by element of stl unordered map
我有一个 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 内存
操作系统分配给进程的内存不一定与当前使用的内存相同。为每个被删除的对象将内存释放回操作系统将是非常低效的。在进程终止之前,您可能会看到分配给进程的内存不会减少。
如果项目本身存储在地图中(而不是指针(,则在使用擦除时将删除它。 如果擦除后地图本身缩小,则可能取决于您使用的特定地图的实现。
一些实现可能会对新插入的项目重用以前删除的表条目,尽管我认为大多数实现不会。您是否正在使用性病库?
相关文章:
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 擦除是否删除 stl 无序列图元素使用的堆内存
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- std::unordered_set 中的元素如何存储在C++内存中?
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 存储 std::list 元素的地址;内存
- MPI_Get仅从共享内存区域读取数组的第一个元素
- C++:指针元素的向量在销毁时是否会自动释放每个指针所指向的动态内存?
- 在数组中移动一系列元素,无需额外内存
- C++释放矢量元素占用的内存时遇到的麻烦
- 从矢量中最快的擦除元素或更好地利用内存(排序基数)
- 独立于元素内存管理的向量上的函数
- 关于内存管理的QT5元素的正确用法
- 分配到STD ::向量元素会导致内存腐败
- 如何根据STL列表中的元素数量分配内存
- 为什么要指向数组或向量中最后一个元素之后的内存位置
- 我可以确保矢量元素始终在内存中吗?
- 我怎么知道基类对象的指针数组中元素的类型,它将为派生类分配内存
- Cuda有效地从字节数组复制到不同大小的共享内存元素