【问题标题】:How does deque manage memory?deque 如何管理内存?
【发布时间】:2015-10-27 06:59:08
【问题描述】:

我在使用deque 容器时有些困惑。

我将vectordeque 进行了比较,我动态输入了整数值,并观察到在几次插入向量的对象开始四处移动并且地址已更改,这似乎是合乎逻辑的。然而,即使我输入了几百个整数,双端队列的对象仍然在内存中的同一位置。

这个观察让我想到 deque 保留的内存比 vector 大得多,但如果这是真的,那么使用动态内存而不是静态内存有什么意义呢?即使是这样,它也会在某处耗尽内存并需要更改内存上的位置,所以下一个问题是它是移动每个对象还是只是开始在其他地方使用内存并将其与之前的位置链接?

deque 容器支持迭代器算法,但使用它是否安全?我想知道双端队列如何管理内存,而不是人们可能更喜欢如何使用它。

【问题讨论】:

标签: c++ containers


【解决方案1】:

双端队列是迷你向量的双链表。这意味着地址是稳定的。

除非执行使迭代器无效的操作,否则迭代器算术是有效的。

向量也是如此

【讨论】:

    【解决方案2】:

    来自this std::deque reference

    ...典型的实现使用一系列单独分配的固定大小的数组

    你可以把它想象成一个数组列表。

    【讨论】:

      【解决方案3】:

      双端队列通常实现为一系列固定长度的元素页面。如果您追加元素,当页面已满时,将分配一个新页面并将其添加到页面索引的末尾。这保证了,如果您仅在末尾或开头添加或删除元素,则已存储的元素不会在内存中移动(用标准话说,对现有元素的引用不会被 push_back、pop_back , push_front 和 pop_front)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-28
        • 2012-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多