STL 内存释放
C++ STL 中的map,vector等内存释放问题是一个很令开发者头痛的问题,关于
stl内部的内存是自己内部实现的allocator,关于其内部的内存管理本文不做介绍,只是
介绍一下STL内存释放的问题:
记得网上有人说采用Sawp函数可以完全清除STL分配的内存,下面使用一段代码来看看
结果:
首先测试vector:
void TestVector() { sleep(10);
cout<<"begin vector"<<endl;
size_t size = 10000000;
vector<int> test_vec;
for (size_t i = 0; i < size; ++i) {
test_vec.push_back(i);
}
cout<<"create vector ok"<<endl;
sleep(5);
cout<<"clear vector"<<endl;
// 你觉得clear 它会降低内存吗?
test_vec.clear();
sleep(5);
cout<<"swap vector"<<endl;
{
vector<int> tmp_vec;
// 你觉得swap它会降低内存吗?
test_vec.swap(tmp_vec);
}
sleep(5);
cout<<"end test vector"<<endl;
}
结果显示:调用clear函数完全没有释放vector的内存,调用swap函数将vector的内存释放完毕。
再来看看map:
void TestMap() { size_t size = 1000000;
map<int, int> test_map;
for (size_t i = 0; i < size; ++i) {
test_map[i] = i;
}
cout<<"create map ok"<<endl;
sleep(5);
cout<<"clear map"<<endl;
// 你觉得clear 它会降低内存吗?
test_map.clear();
sleep(5);
cout<<"swap map"<<endl;
{
// 你觉得swap它会降低内存吗?
map<int,int> tmp_map;
tmp_map.swap(test_map);
}
sleep(5);
cout<<"end test map"<<endl;
}
结果显示:调用clear函数完全没有释放map的内存,调用swap函数也没有释放map的内存。
结论:
上面测试的结果:STL中的clear函数式完全不释放内存的,vector使用swap可以释放内存,map则不可以,貌似而STL保留了这部分内存,下次分配的时候会复用这块内存。
STL 内存释放的更多相关文章
- STL—内存的配置与释放
上一篇我们介绍了STL对象的构造与析构,这篇介绍STL内存的配置与释放. STL有两级空间配置器,默认是使用第二级.第二级空间配置器会在某些情况下去调用第一级空间配置器.空间配置器都是在allocat ...
- STL vector 内存释放
最近在论坛看到一个提问帖子,问题是vector中存储了对象的指针,调用clear后这些指针如何删除? class Test { public: Test() {} ~Test() { cout < ...
- 关于vector的内存释放问题
以前一直想当然的以为vector 的clear()函数会保证释放vector的内存,今天网上一查资料发现完全不是我想象的那样子. 比如有如下代码: tempObject obj1; tempObjec ...
- C++STL内存管理方法(g++版)
STL作为C++的经典作品,一直备受人们关注.本文主要介绍STL的内存管理策略. 早期的STL内存管理 第一次接触STL源码是看侯捷先生的<STL源码剖析>,此书通俗易懂,剖析透彻,是极佳 ...
- STL内存配置器
一.STL内存配置器的总体设计结构 1.两级内存配置器:SGI-STL中设计了两级的内存配置器,主要用于不同大小的内存分配需求,当需要分配的内存大小大于128bytes时, 使用第一级配置器,否则使用 ...
- vector的内存释放
转自:http://www.cnblogs.com/summerRQ/articles/2407974.html vector : C++ STL中的顺序容器,封装数组 1. vector容器的内存自 ...
- STL内存分配
STL内存创建 Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源 1. Stl内存创建基类模板__malloc_alloc_tem ...
- malloc内存分配与free内存释放的原理
malloc内存分配与free内存释放的原理 前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂. 后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理 ...
- STL内存管理
1. 概述 STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物. STL标准如下介绍Allocator the STL includes s ...
随机推荐
- Unity3d外包(北京)公司(长年承接U3D外包)
我们制作各类型严肃游戏,虚拟现实,增强现实项目! 品质保证,售后完备. 联系请加QQ:372900288 电话:13911652504 我们团队成立于2011年10月,是一个专业从事严肃游戏研发的团 ...
- 高效的插入子节点DocumentFragment
DocumentFragment 对象 DocumentFragment 接口表示文档的一部分(或一段).更确切地说,它表示一个或多个邻接的 Document 节点和它们的所有子孙节点. Docume ...
- VMware Ubuntu Kaldi
1.VMware10.0 秘钥网上搜就好了 2.ubuntu12.04 (1)安了几次14.04,16.04,12.04,最后窗口和分辨率的bug 还是没有解决 (2)终端显示菱形乱码的解决:直接用英 ...
- Exit code from container executor initialization is : 24 ExitCodeException exitCode=24: Configuration file ../etc/hadoop/container-executor.cfg not found.
/etc/hadoop/conf的软链接(/etc/hdfs/conf)不正确,应该是/etc/yarn/conf
- 创建ajax异步对象方法
ajax的xmlhttp对象创建: function createXmlHttp(){ var xmlHttp; try{ // Firefox, Opera 8.0+, Safari xmlHttp ...
- java:同步和死锁
多个线程共享一个资源的时候需要进行同步(否则会出现错误:如负数,重复数),但是过多的同步会造成死锁. synchronized(this) { } 非同步情况: public class SyncTh ...
- 在线调试lua原型设计
在规模日益增长的软件项目开发中, 如何有效的进行代码调试成为影响开发效率的致命因素之一.在当今网络游戏项目中, lua几乎成了项目脚本的标配.编译型的语言, 诸如C++, 都有良好的ide支持调试.而 ...
- 解决 笔记本键盘打字母却跳出数字来,每次都要按一遍Fn+Num LK 的问题
方法一. 开始-运行,输入“Regedit"命令进入注册表 HKEY_USERS\.DEFAULT\Control Panel\Keyboard 将 InitialKeyboardIndic ...
- 张艾迪(创始人):Be.Time+Cr.Idear的创新理念
The World No.1 Girl :Eidyzhang The World No.1 Internet Girl :Eidyzhang AOOOiA.global Founder :Eidyzh ...
- MySQL ERROR 1005: Can't create table (errno: 150)的错误解决办法
在mysql 中建立引用约束的时候会出现MySQL ERROR 1005: Can't create table (errno: 150)的错误信息结果是不能建立 引用约束. 出现问题的大致情况 1. ...