C++ c++;:释放矢量存储器,清除&;交换

C++ c++;:释放矢量存储器,清除&;交换,c++,memory,vector,swap,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_ba

我读了一篇关于向量内存泄漏的博客。给定一个向量,插入大量数据后,即使删除大量数据(或使用
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
//code1
//为什么这个订单最好?
//存储器316
向量体;
对于(int i=0;i自c++11以来,您可以使用来请求删除未使用的容量。

我不得不猜测:“内存”注释是否基于操作系统在询问您的应用程序内存使用情况时给出的数字?

如果是这种情况,那么这与应用程序的实际内存使用情况并不直接相似。相反,这是操作系统为应用程序保留的内存。
当不需要为其他应用程序腾出空间时,就不需要为操作系统收缩保留内存。

你有什么问题?什么是“无效”的意思是?这不是内存泄漏。另外,你是如何衡量你的内存消耗的?关键词是“请求”。这是一个无约束力的请求,所以可能没有什么区别。
//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