在阅读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上执行成百上千的推和弹操作,你不认为它会炸掉我的公羊吗?我希望我听起来不好笑。
问候
发布于 2018-05-07 08:29:28
让我们首先了解一下shrink_to_fit所做的事情。
std::deque不是连续内存(与向量不同),它使用内存块。这实际上意味着它有多个大小的块。
可能会出现这样的情况,即一个块只包含1或2个元素或X个元素,从而阻止了这些块被删除。
shrink_to_fit()只是帮助管理这个场景。它试图移动元素,以便在可能的情况下释放块。
结论
shrink_to_fit()与内存分配和释放无关,调用有限数量的元素可能是无用的。
发布于 2018-05-07 08:11:33
只要容器至少有10个元素,程序就会在每个循环(无限)迭代中执行1 push_back和1 pop_front。
内存使用应该是稳定的,即使不使用shrink_to_fit()
编辑它依赖于std::deque的实现,因此内存使用可能超过10个元素,但在您的情况下,它不应该急剧增长。
https://stackoverflow.com/questions/50209422
复制相似问题