免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6532 | 回复: 7
打印 上一主题 下一主题

list占内存是否泄漏? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-31 21:15 |只看该作者 |倒序浏览
list中放入大量数据,处理后如何删除,才能使程序所占内存降至放入数据之前的水平?

是了很多种方法,好像是只增不减。

论坛徽章:
0
2 [报告]
发表于 2004-08-01 09:34 |只看该作者

list占内存是否泄漏?

既然你试了很多方法,那就把你试的方法贴出来让大家看看,如何?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-08-01 10:39 |只看该作者

list占内存是否泄漏?

原帖由 "lllll" 发表:
list中放入大量数据,处理后如何删除,才能使程序所占内存降至放入数据之前的水平?

是了很多种方法,好像是只增不减。
像list这样的STL 容器会自动管理内存分配与释放啊.你清空掉list不就释放掉了么?有什么问题?

论坛徽章:
0
4 [报告]
发表于 2004-08-01 11:16 |只看该作者

list占内存是否泄漏?

用top看,程序所占内存是只增不减得。
删除的方法试过 remove,erase,pop_front,pop_back,clear.

不知道还有没有别的什么方法?

论坛徽章:
0
5 [报告]
发表于 2004-08-02 10:21 |只看该作者

list占内存是否泄漏?

跟thebest讨论后发现我的帖子观点有无,删除之,以免误导旁人。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-08-02 13:26 |只看该作者

list占内存是否泄漏?

list<int>; c(10000);
list<int>;().swap(c);
这样的话会将list占用的内存释放给该进程管理.

---------
能不能解释一下?给进程管理是什么意思呢?它不是创建一个临时对象然后在这
个初始化之后就会消失吗?也是list自动管理吧?

论坛徽章:
0
7 [报告]
发表于 2004-08-02 14:31 |只看该作者

list占内存是否泄漏?

跟thebest讨论后发现我的帖子观点有无,删除之,以免误导旁人。

论坛徽章:
0
8 [报告]
发表于 2004-08-02 18:47 |只看该作者

list占内存是否泄漏?

vector容器类的元素连续存放在一块内存区域中,所以删除部分甚至是全部元素后这块已经分配的内存空间并不被回收(主要是为了提高效率),其大小不变。与此不同,list 类的元素是节点存储方式,每删除一个元素,同时会回收这个元素所占有的内存空间。

如果想在程序中回收vector元素所占有的空间,就要使用上面帖子中给出的 swap 法。对于list,就没有这个必要了。其成员函数
remove,erase,pop_front,pop_back,clear等都会回收被删除元素的内存空间。

至于即使释放内存用 top 查看其内存只增不减的问题,是现代编译器普遍采用的一项内存优化策略所导致的,即进程中被释放的内存并不是真正地交给操作系统,而是仍归本进程使用。遇到下一次本进程分配内存的时候优先考虑这块被释放的内存空间,而不必每次都向操作系统提出分配内存的请求,从而可提高内存分配的效率。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP