繁体   English   中英

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

[英]C++ STL queue memory usage compared to vector?

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

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

  • std::vector非常节省内存,它几乎使用零开销。 在大多数平台上, std::vector<int>每个项目使用大约4个字节。

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

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

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

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

脚注

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

暂无
暂无

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

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