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

bug*_*tar 5 c++ memory 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
Run Code Online (Sandbox Code Playgroud)

然后我切换了订单:

//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
Run Code Online (Sandbox Code Playgroud)

我用其中一个似乎也无效.为什么code1看起来无效?

for*_*idt 3

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