我读了一篇关于向量内存泄漏的博客。给定一个向量,在插入大量数据之后,即使你删除了大量数据(或使用 clear()
删除了全部数据),它的容器容量也不会改变,仍然会占用内存。为了避免这种情况,我们应该思考如何改变容器的容量,使其与当前所需数据保持一致。
因此,我写了一个测试:
//code1
//why this order is best?
//memory 316
vector<string>vNum;
for (int i=0; i<100000; i++)
{
vNum.push_back("asfdsafadfsfsafsafsafdsfsdaf");
}
//memory 22732
vNum.clear();
//memory 4904
vector<string>(vNum).swap(vNum);
//memory 612
然后我改变了顺序:
//code2
//memory 308
vector<string>vNum;
for (int i=0; i<100000; i++)
{
vNum.push_back("asfdsafadfsfsafsafsafdsfsdaf");
}
//memory 23284
vector<string>(vNum).swap(vNum);
//memory 23324
vNum.clear();
//memory 4396
我使用其中一个代码似乎也无效。为什么code1
看起来无效?