c++: 释放向量内存,clear&swap
c++: release vector memory, clear&swap
我阅读了一篇关于向量内存泄漏的博客。给定一个vector,在插入大量数据后,即使你删除大量数据(或者用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
似乎无效?
自 c++11 起,您可以使用 std::vector::shrink_to_fit()
请求移除未使用的容量。
我不得不猜测:"memory" 评论是基于您的 操作系统 在被问及您的应用程序的内存使用情况时给您的数字吗?
如果是这种情况,那么这并不直接类似于您的应用程序的实际内存使用情况。它是 OS 为您的应用程序保留的。当不需要为其他应用程序制作 space 时,不需要为 OS.
收缩预留内存
我阅读了一篇关于向量内存泄漏的博客。给定一个vector,在插入大量数据后,即使你删除大量数据(或者用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
似乎无效?
自 c++11 起,您可以使用 std::vector::shrink_to_fit()
请求移除未使用的容量。
我不得不猜测:"memory" 评论是基于您的 操作系统 在被问及您的应用程序的内存使用情况时给您的数字吗?
如果是这种情况,那么这并不直接类似于您的应用程序的实际内存使用情况。它是 OS 为您的应用程序保留的。当不需要为其他应用程序制作 space 时,不需要为 OS.