[英]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.