std :: queue内存消耗会导致内存泄漏 - C ++?

时间:2014-02-23 04:35:40

标签: c++ visual-c++ memory stl queue

即使在我弹出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

3 个答案:

答案 0 :(得分:6)

通过defalut std容器一旦保留了内存就不会释放内存。 std :: queue通常在提供shrink_to_fit的std :: dequeue类型上实现。如果您不使用c ++ 11,请使用swap idiom

答案 1 :(得分:2)

如果你释放/释放/删除堆内存。这并不意味着内存消耗会立即降低。内存管理库有自己的可用内存缓存,它们会在达到阈值后释放。

答案 2 :(得分:0)

首先,3000个整数使用的内存非常低,如果使用任务管理器检查内存,则无法看到内存使用量发生重大变化。另外,如其他答案中所解释的,STL容器不会立即解除分配。 有一个很好的forum讨论STL对象和对象指针的内存分配和释放。