我在阅读有关双端队列的地方时,发现一条语句,指出pop_back和pop_front只是从双端队列中删除了元素,而留下了指向要删除的元素的指针。
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++;
}
为了防止万一,我使用了rinkle_to_fit()。
现在,如果该程序永远运行,并且我们在双端队列中执行了成千上万的推和弹出操作,您是否认为它会炸毁我的内存?
我希望我不会听起来很有趣。
问候
最佳答案
首先让我们了解shrink_to_fit
的作用。std::deque
不是连续的内存(不同于 vector ),它使用内存块。这实际上意味着它具有多个大小不同的块。
可能会出现这样的情况,即一个块仅包含1或2或一些X数量的元素,导致无法删除该块。shrink_to_fit()
仅有助于管理这种情况。它尝试移动元素,以便在可能的情况下释放块
结论shrink_to_fit()
与内存分配和释放无关,并且调用有限数量的元素可能毫无用处。
关于c++ - 双端存储释放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50209422/