首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Deque内存释放

Deque内存释放
EN

Stack Overflow用户
提问于 2018-05-07 07:48:58
回答 2查看 323关注 0票数 2

在阅读deque的某个地方时,我发现了一条语句,即pop_back和pop_front只是从deque中删除元素,留下指向被移除元素的指针。

代码语言:javascript
复制
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上执行成百上千的推和弹操作,你不认为它会炸掉我的公羊吗?我希望我听起来不好笑。

问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-07 08:29:28

让我们首先了解一下shrink_to_fit所做的事情。

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

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

shrink_to_fit()只是帮助管理这个场景。它试图移动元素,以便在可能的情况下释放块。

结论

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

票数 0
EN

Stack Overflow用户

发布于 2018-05-07 08:11:33

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

内存使用应该是稳定的,即使不使用shrink_to_fit()

编辑它依赖于std::deque的实现,因此内存使用可能超过10个元素,但在您的情况下,它不应该急剧增长。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50209422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档