首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++:释放向量内存,清除和交换

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

Stack Overflow用户
提问于 2015-07-16 06:54:56
回答 2查看 120关注 0票数 5

我读了一个关于矢量内存泄漏的博客。给定一个向量后,插入大量数据后,即使删除大量数据(或使用clear()删除所有数据),它也不会改变容器的容量,它仍将占用内存。为了避免这种情况,我们应该想办法改变容器的容量,使其与当前所需的数据保持一致。

所以我写了一个测试:

代码语言:javascript
复制
//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

然后我改变了命令:

代码语言:javascript
复制
//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看起来是无效的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-16 07:06:41

我不得不猜测:当被问及应用程序的内存使用情况时,“内存”注释是否基于操作系统提供的数字?

如果是这样的话,那么这与应用程序的实际内存使用情况并不完全相同。相反,操作系统为您的应用程序保留了。当不需要为其他应用程序留出空间时,就没有必要缩小操作系统的预留内存。

票数 3
EN

Stack Overflow用户

发布于 2015-07-16 07:00:52

从c++11开始,您可以使用std::vector::shrink_to_fit()请求删除未使用的容量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31447258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档