map erase 内存释放问题
来源:互联网 发布:汇众教育知乎 编辑:程序博客网 时间:2024/06/06 01:39
资料出处:http://www.cnblogs.com/goodness/archive/2012/05/16/2503832.html
研究了下c++中map的内存占用情况。很多人说map中的erase以及clear不能释放内存,这几天实验了下,这个说法是不确切的,较为准确的说法应该是,map中的erase以及clear,不能,“马上”释放内存。map有自己的机制回收内存,用erase以及clear之后,如果没有特殊需求,可以认为那部分内存已经释放了。map不会马上释放删掉内容的内存,而是会对内存进行“预留”,如果确实很长时间用不到预留的内存,才会释放。 做了这样几个实验,P1不停的填充map,监控程序内存占用情况。自然内存是不断上升的。P2则是向map中填充200M数据后,一个一个进行erase到0个,然后再重新填充。可以看到,填充过程内存连续增加,可是erase过程,内存没有连续减少。而是一段时间之后,忽然减少的2M左右。重新填充,内存再增加至之前的200M。P3的过程是,先向Map中填充200M数据,然后erase掉偶数index的数据(即删掉100M),然后再填充200M,如此往复。发现内存占用开始不断增加,到删除100M数据时,内存不变。第二轮填充开始,内存仍不变,直到填充100M以上后,内存开始继续增加。由以上实验可知,map有较为科学的内存回收机制。可以认为clear以及erase的空间,map会在合适的时间回收。
C++:删除map元素,当value值为指针时,如何释放内存。
出自 http://blog.csdn.net/ttguess/article/details/7860768
class A { ··· ···}
map< string, A* > stoaMap;
1)通过迭代器遍历删除
map< string,A* >::iterator iter = stoaMap.begin();
while(iter != stoaMap.end()) //#1
{
//注意要先释放内存,在删除map元素,顺序不能颠倒。
//释放内存
delete iter->second;
iter->second = NULL;
//删除map元素
stoaMap.erase(iter++); //#1
}
注:#1是为了防止迭代器失效。
0 0
- map erase 内存释放问题
- map的内存释放问题
- STL map内存释放的问题
- vector和map的erase问题
- vector和map的erase问题
- map::erase
- JS内存释放问题
- js 内存释放问题
- UIScrollview 内存释放问题
- Free()内存释放问题
- 内存的释放问题
- ffmpeg内存释放问题
- iframe内存释放问题
- 释放内存越界问题
- CvSeq 的内存释放问题
- 非模态对话框内存释放问题
- CvSeq 的内存释放问题
- 关于内存释放的问题
- MVC封装(十)medoo数据类
- 我的框架--QiCai(加载控制器)
- Execl导入功能(两种方式)
- Oracle 快速卸载数据到文本文件
- LinPhone 导入 Android Studio 实现二次开发
- map erase 内存释放问题
- Servlet高级编程
- 可信执行环境(TEE)介绍 与应用
- C/C++函数参数传递机制
- xcode8回车缩进问题
- AndroidStudio常用设置,适合新手使用
- 【Codeforces 652 A Gabriel and Caterpillar】+ 手速
- Spark算子:RDD基本转换操作(5)–mapPartitions、mapPartitionsWithIndex
- Zabbix技巧系列——利用Agent Active模式监控在NAT网络中的设备