繁体   English   中英

如何从std :: deque中释放内存?

[英]How to release memory from std::deque?

我正在使用std::deque来存储相当多的对象。 如果我删除了一堆这些对象,在我看来它的内存使用量并没有减少,与std :: vector类似。

有没有办法减少它? 我知道在矢量中你必须使用'交换技巧',我认为它也适用于此,但我宁愿避免使用它,因为它需要复制容器中剩下的所有元素(因此需要你有足够的内存来存储每个对象两次)。 我并不熟悉deque的实现,但我对它的理解是,有可能在没有大量副本的情况下实现这样的事情(而使用矢量显然不是这样)。

我正在使用VC ++(Dinkumware)STL,如果这有任何区别的话。

在std :: deque中无法直接执行此操作。 但是,通过使用临时(这基本上是在缩小容量时std :: vector中发生的事情)很容易。

这是一篇关于std :: deque好文章 ,将它与std :: vector进行比较。 最底部显示了一种交换和收缩矢量的简洁方法,它与deque的工作方式相同。

双端队列的内存大小可能会缩小,也可能不会缩小。 何时以及如何发生这是特定于实现的。 不幸的是,你没有太多的手动控制,因为deques缺乏甚至容量()或保留()。

如果确实检测到内存释放没有在您方便时执行,我建议使用swap()。

可以从Dikum网站获得对deque内存管理的深入了解(这是您当前的实现,对吗?)

作为补充信息:

在C ++ 0x / C ++ 11中,deque(和其他几个容器)有一个名为“shrink_to_fit”的新函数,它将删除多余的项目并基本上对齐capacity()== size()

std :: deque会将内存返回给它的分配器。 这个分配器通常不会将内存返回给操作系统。 在这种情况下,看起来好像内存没有“释放”。 一旦内存返回到分配器,就会满足好的内存泄漏检测器,并且理解并非所有内存都是由free()释放的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM