我读了一个关于矢量内存泄漏的博客。给定一个向量后,插入大量数据后,即使删除大量数据(或使用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看起来是无效的?
发布于 2015-07-16 07:06:41
我不得不猜测:当被问及应用程序的内存使用情况时,“内存”注释是否基于操作系统提供的数字?
如果是这样的话,那么这与应用程序的实际内存使用情况并不完全相同。相反,操作系统为您的应用程序保留了。当不需要为其他应用程序留出空间时,就没有必要缩小操作系统的预留内存。
发布于 2015-07-16 07:00:52
从c++11开始,您可以使用std::vector::shrink_to_fit()请求删除未使用的容量。
https://stackoverflow.com/questions/31447258
复制相似问题