即使在我弹出qInt队列中的所有元素之后,以下代码也没有释放3000个元素消耗的内存。是什么原因 ?
std::queue<int> qInt; //Step01: Check the running memory
for (int i=0;i<3000;i++)
{
qInt.push(i);
}
//Step02: Check the running memory it should have been increased
while(!qInt.empty())
{
qInt.pop();
}
//Step03: Check the running memory expecting Step01 memory but it is still the same of Step02
答案 0 :(得分:6)
通过defalut std容器一旦保留了内存就不会释放内存。 std :: queue通常在提供shrink_to_fit的std :: dequeue类型上实现。如果您不使用c ++ 11,请使用swap idiom。
答案 1 :(得分:2)
如果你释放/释放/删除堆内存。这并不意味着内存消耗会立即降低。内存管理库有自己的可用内存缓存,它们会在达到阈值后释放。
答案 2 :(得分:0)
首先,3000个整数使用的内存非常低,如果使用任务管理器检查内存,则无法看到内存使用量发生重大变化。另外,如其他答案中所解释的,STL容器不会立即解除分配。 有一个很好的forum讨论STL对象和对象指针的内存分配和释放。