Deque内存释放

时间:2018-05-07 07:48:58

标签: c++

我正在阅读关于deque的某个地方,我发现一个声明,pop_back和pop_front只是从deque中删除了一个元素,留下了指向被删除元素的指针。

int i=1;
std::deque<int> value:
while(1){ 
    if(value.size()>10){
        value.pop_front();
        value.shrink_to_fit();
    }
    value.push_back(i);
    i++;
}

为了以防万一,我使用了shrink_to_fit()。

现在,如果该程序永远运行,我们在deque上进行成百上千的推送和弹出操作,你不觉得它会爆炸我的ram吗? 我希望我听起来不好笑。

此致

2 个答案:

答案 0 :(得分:0)

只要你的容器至少有10个元素,你的程序就是  在每个循环(无限)迭代中执行1次push_back和1次pop_front。

即使您不使用shrink_to_fit()

,内存使用也应该稳定

[编辑]它取决于std :: deque的实现 所以内存使用量可能超过10个元素,但在你的情况下不应该大幅增长。

答案 1 :(得分:0)

让我们先了解shrink_to_fit的作用。

std::deque不是连续的内存(与向量不同)并使用内存块。这实际上意味着它有一些大小的多个块。

可能会出现块只包含1或2个或一些X元素的情况,这些元素会阻止删除此块。

shrink_to_fit()只是有助于管理这种情况。它尝试移动元素,以便在可能的情况下释放块

<强>结论

shrink_to_fit()与内存分配和释放无关,调用有限数量的元素可能毫无用处。