我应该缩小std :: queue以适应?

Sun*_*min 6 c++ c++11

我正在考虑使用std::queue(with std::deque)FIFO结构.

在队列数据结构中,数据仅在后面推送并在前面弹出.因此,弹出元素后前面的内存永远不会被使用.

我记得std :: vector在我显式调用shrink_to_fit方法之前不会释放内存.怎么样std::deque

那么,我应该考虑释放前面永远不会再使用的内存吗?

Nic*_*las 7

内存分配特性std::deque是实现定义的.对于何时分配或释放内存,该标准没有具体要求deque.插入,删除和访问性能的渐近要求强制实现某些行.但其中可能有很多变化.

一般来说,如果从前面弹出足够的东西deque,就会发生内存释放.


Arn*_*rtz 5

shrink_to_fit如果正常使用,您并不需要一个队列.std::vectorshrink_to_fit是为其中向量内容由一个巨大的量减少,所以,它实际上有一个好处调用(而昂贵)的重新分配,从而来释放大量内存的情况.如果载体具有短寿命或其大小变化不太大,通常不需要它.

话虽如此,a std::deque是一种不同的野兽.它通常由固定大小的内存块组成.如果从desque中删除了大量元素,则不再包含任何元素的块可以/将被释放.因此,您可以随时获得的最大内存开销略低于块大小的两倍,例如,如果队列仅包含两个元素,一个位于块的末尾,第二个位于下一个块的开头.因此,std::deque::shrink_to_fit只能以恰好释放一个块的方式移动双端队列的元素,这不是一个很大的收益(iirc典型的实现具有几kb的块大小).

这些是非常笼统的陈述,可能不适用于记忆危急情况.但作为标准容器,传感器和非双色都没有明确地设计用于这种极端情况.如果内存占用是您使用队列的程序部分中的问题,则可能需要使用另一个数据结构.