C++:释放向量内存,清除和交换

5

我读了一篇关于向量内存泄漏的博客。给定一个向量,在插入大量数据之后,即使你删除了大量数据(或使用 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看起来无效?


1
你有什么问题?“ineffective”是什么意思? - songyuanyao
2
那不是内存泄漏。 - juanchopanza
1
另外,你如何度量你的内存消耗? - T.C.
2个回答

3

关键词是“请求”。这是一个非约束性的请求,因此可能没有任何影响。 - juanchopanza

3

我猜测:你所说的“内存”注释是基于操作系统在询问你的应用程序内存使用情况时给出的数字吗?
如果是这样的话,那么这并不直接反映你的应用程序实际的内存使用情况。相反,它是操作系统为你的应用程序保留的内存。当没有必要为其他应用程序腾出空间时,也就没有必要缩小操作系统保留的内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接