C++ STL队列内存使用情况与向量相比?

Wil*_*ood 5 c++ memory queue stl

我想知道队列与向量相比使用了多少内存.前几天我遇到了一个问题,我有一个使用大约60MB的int队列数组,当相同的数据放在矢量矢量中时,它使用了大约4MB.这是编程程序时我的错误还是stl队列通常使用比向量更多的内存?

Die*_*Epp 15

std::queue是一个容器适配器,而不是容器本身.那么让我们比较一些实际容器的开销:

  • std::vector它的内存效率非常高,它几乎消耗了零开销.一个std::vector<int>使用每个项目约4个字节,在大多数平台上.

  • std::list内存非常低效,它可能会使用每个项目的两个开销指针.A std::list<int>在64位平台上每个项目使用大约24个字节,在32位平台上使用12个字节.

  • std::deque介于两者之间,它是默认容器std::queue.根据"内存开销是怎么回事std::deque",MSVC双端队列是一个块列表,每个块包含大约16个字节,如果你的队列中包含一个或两个int,你就会有很多开销.队列

影响开销的另一个因素是平台上分配器的效率,除非您能够对结果进行说明,否则会对结果进行着色.两个实现之间的15倍差异是如此之大,以至于完全可疑 - 这让我想知道你是如何获得这些数字的.

通常,如果您的队列很短,那么与其他实现相比,还有很大的改进空间.如果您可以编写自己的容器,可以编写循环缓冲容器或使用Boostcircular_buffer.循环缓冲器结合了deque类型操作的内存效率std::vector和CPU效率std::deque.有点让我希望它开始于STL.那好吧.

脚注

实际的开销量将随实施而变化.