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看起来无效?
我必须猜测:“内存”注释是否基于操作系统在询问应用程序内存使用情况时提供的数字?
如果是这种情况,那么这并不直接类似于应用程序的实际内存使用情况。相反,它是操作系统为您的应用程序保留的内容。当不需要为其他应用程序腾出空间时,无需缩小操作系统的保留内存。
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |