我正在考虑将std :: queue(带有std :: deque)用于FIFO结构.
在队列数据结构中,数据仅在后面推送并在前面弹出.
因此,弹出元素后前面的内存永远不会被使用.
我记得std :: vector在我明确调用shrink_to_fit方法之前不会释放内存.
那么std :: deque怎么样?
那么,我应该考虑释放前面永远不会再使用的内存吗?
解决方法
如果正常使用,您不需要为队列准确的shrink_to_fit. std :: vector的shrink_to_fit适用于矢量内容已经大量减少的情况,因此实际上有一个好处是调用(相当昂贵的)重新分配以释放大量内存.如果载体具有短寿命或其大小变化不太大,通常不需要它.
话虽如此,std :: deque是一种不同的野兽.它通常由固定大小的内存块组成.如果从desque中删除了大量元素,则不再包含任何元素的块可以/将被释放.因此,您可以随时获得的最大内存开销略低于块大小的两倍,例如如果队列只包含两个元素,一个在一个块的末尾,另一个在下一个块的开头.因此,std :: deque :: shrink_to_fit只能以恰好释放一个块的方式移动deque的元素,这不是一个很大的收益(iirc典型的实现具有几kb的块大小).
这些是非常笼统的陈述,可能不适用于记忆危急情况.但作为标准容器,传感器和非双色都没有明确地设计用于这种极端情况.如果内存占用是您使用队列的程序部分中的问题,则可能需要使用另一个数据结构.