清晰的矢量矢量有效C ++

时间:2017-03-26 08:30:16

标签: c++ memory vector

我遇到了创建2级或3级嵌套向量的需要,但是这个内存问题没有正确清除。所以我做了这个简单的测试:

void test(){
vector<vector<double>> myContainer;

vector<double> vec = {1};
for (int i=0; i<20000000; ++i)
{
    myContainer.push_back(vec);
}
FreeAll(myContainer);
}    

其中FreeAll()是模板函数,定义如下:

template <typename T>
void FreeAll( T & t ) {
T tmp;
t.swap(tmp);
}

现在,在main()中调用函数test(),我们会发现即使在离开测试函数的作用域之后仍然存在大量剩余内存,并且在主终止之前内存不会被清除。

可能是因为我创造了太多的向量?因为所有存储都是自动的,所以这里没有任何内存泄漏。

1 个答案:

答案 0 :(得分:0)

在这种情况下,Ubuntu的默认系统监视器中没有任何内存泄漏和内存观察。

所以在main()中调用test()4次并检查最后3次调用是否会分配更多内存或者从之前的分配中重用它,结果发现不再分配内存并且内存确实是可重用的它只会在程序终止后释放。相反,创建一个double的向量并推送相同数量的双精度并调用FreeAll(),它实际上会立即释放内存并返回到操作系统。