gpt4 book ai didi

与 vector 相比,C++ STL 队列内存使用情况?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:59 35 4
gpt4 key购买 nike

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

最佳答案

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

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

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

  • std::deque介于两者之间,是std::queue的默认容器.根据"what the heck is going on with the memory overhead of std::deque " ,MSVC 双端队列是一个 block 列表,每个 block 包含大约 16 个字节,如果您的队列包含一个或两个 int,这是相当多的开销。每个人都有很多队列。

影响开销的另一个因素是您平台上分配器的效率,除非您可以解释它,否则它将影响您的结果。两个实现之间的 15 倍差异是如此之大,以至于完全值得怀疑——这让我想知道你是如何得到这些数字的。

一般来说,如果您的队列很短,则与其他实现相比还有很大的改进空间。如果您愿意编写自己的容器,则可以编写一个循环缓冲容器或使用 Boost's circular_buffer .循环缓冲区结合了 std::vector 的内存效率CPU 效率为 std::deque用于双端队列类型的操作。有点让我希望它一开始就在 STL 中。好吧。

脚注

实际的开销量会因实现而异。

关于与 vector 相比,C++ STL 队列内存使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14784551/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com