免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: ideawu
打印 上一主题 下一主题

[C++] 如何让 STL 确实释放内存 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2008-06-02 17:58 |只看该作者
怎么没人看我的回贴呢..
明显有使用问题..

map<int,int> *m = new map<int,int>();
int loop = 1024*1024*16;
for(int i=0;i<loop; i++){
    m = i;
}
m 是一个指针..怎么能用m 呢..
应该是 (*m)   = i

论坛徽章:
0
22 [报告]
发表于 2008-06-02 21:20 |只看该作者
原帖由 cookis 于 2008-6-2 17:58 发表
怎么没人看我的回贴呢..
明显有使用问题..

map *m = new map();
int loop = 1024*1024*16;
for(int i=0;i

不好意思, 代码摘要出来时出错了. 但问题不是这里.

论坛徽章:
0
23 [报告]
发表于 2008-06-13 18:09 |只看该作者
我觉得问题在于不应该抱这样的想法:是个东西就应该往内存里扔,内存不够就去买。
有些东西还是放磁盘上,该要得时候再去取吧。

论坛徽章:
0
24 [报告]
发表于 2008-06-18 21:08 |只看该作者
原帖由 ideawu 于 2008-6-1 20:04 发表

我就用你的程序试了, 一样效果.

不过, 我改成 vector 后, 内存确实返回给操作系统了. 我的 gcc 是 3.4.4 版本, 我升级后再试试.


你改为vector应该是一次连接申请多个,这样比较大的内存是直接从操作系统申请的,所以释放也可以直接归还给操作系统。但如果你的节点数在峰值很大的话,一旦减下来你只有重新构造一个新的vector之后释放原来的才行吧,否则vector的实际内存不会随着删除节点而变小吧。
二级内存配置器支持的最大内存应该是128字节吧。

论坛徽章:
0
25 [报告]
发表于 2011-03-25 10:26 |只看该作者
map<string,CDataItem*> Items;

...
add item ....
....

        map<string,CDataItem*>::iterator iter;

        for(iter =Items.begin();iter!=Items.end();++iter)
        {
                delete iter->second;
        }

        Items.clear();


测试 ok

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
26 [报告]
发表于 2011-03-25 14:27 |只看该作者
在delete m;后面再加一句:
delete (new char[1024*1024]);
试一下

论坛徽章:
0
27 [报告]
发表于 2014-03-13 01:01 |只看该作者
换一个新的内存分配器, 如jemalloc, 应该就可以. 没时间试.

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
28 [报告]
发表于 2014-03-15 15:37 |只看该作者
ideawu 发表于 2008-05-31 19:48
我使用的 STL map 在 delete 后, 内存不释放(从操作系统的角度). 我知道这是一个 expected behavior, 不过, ...

delete后的内存,可以被再利用,在本进程内。
有的内存分配器可以释放出去,但是运行的较慢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP