我正在阅读关于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吗? 我希望我听起来不好笑。
此致
答案 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()
与内存分配和释放无关,调用有限数量的元素可能毫无用处。