c ++:释放向量记忆,清除和交换

时间:2015-07-16 06:54:56

标签: c++ memory vector swap

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

2 个答案:

答案 0 :(得分:3)

从c ++ 11开始,您可以使用std::vector::shrink_to_fit()请求删除未使用的容量。

答案 1 :(得分:3)

我必须猜测:“内存”评论是基于您的操作系统在询问应用程序的内存使用情况时给出的数字吗? 如果是这种情况,那么这并不直接类似于应用程序的实际内存使用情况。相反,它是操作系统保留的应用程序。如果不需要为其他应用程序腾出空间,则无需缩小操作系统的保留内存。