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 内存释放的更多相关文章

  1. STL—内存的配置与释放

    上一篇我们介绍了STL对象的构造与析构,这篇介绍STL内存的配置与释放. STL有两级空间配置器,默认是使用第二级.第二级空间配置器会在某些情况下去调用第一级空间配置器.空间配置器都是在allocat ...

  2. STL vector 内存释放

    最近在论坛看到一个提问帖子,问题是vector中存储了对象的指针,调用clear后这些指针如何删除? class Test { public: Test() {} ~Test() { cout < ...

  3. 关于vector的内存释放问题

    以前一直想当然的以为vector 的clear()函数会保证释放vector的内存,今天网上一查资料发现完全不是我想象的那样子. 比如有如下代码: tempObject obj1; tempObjec ...

  4. C++STL内存管理方法(g++版)

    STL作为C++的经典作品,一直备受人们关注.本文主要介绍STL的内存管理策略. 早期的STL内存管理 第一次接触STL源码是看侯捷先生的<STL源码剖析>,此书通俗易懂,剖析透彻,是极佳 ...

  5. STL内存配置器

    一.STL内存配置器的总体设计结构 1.两级内存配置器:SGI-STL中设计了两级的内存配置器,主要用于不同大小的内存分配需求,当需要分配的内存大小大于128bytes时, 使用第一级配置器,否则使用 ...

  6. vector的内存释放

    转自:http://www.cnblogs.com/summerRQ/articles/2407974.html vector : C++ STL中的顺序容器,封装数组 1. vector容器的内存自 ...

  7. STL内存分配

    STL内存创建 Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 1.      Stl内存创建基类模板__malloc_alloc_tem ...

  8. malloc内存分配与free内存释放的原理

    malloc内存分配与free内存释放的原理 前段时间一直想看malloc的原理,在搜了好几篇malloc源码后遂放弃,晦涩难懂. 后来室友买了本深入理解计算机系统的书,原来上面有讲malloc的原理 ...

  9. STL内存管理

    1. 概述 STL Allocator是STL的内存管理器,也是最低调的部分之一,你可能使用了3年stl,但却不知其为何物. STL标准如下介绍Allocator the STL includes s ...

随机推荐

  1. mySQL 50个查询系列

    http://bubufx.com/detail-1749088.html http://www.jb51.net/article/67932.htm Student(S#,Sname,Sage,Ss ...

  2. css3——新盒子定义box-sizing

    css3对盒子有了新定义,以前的 盒子实际宽(高) = padding + width(height) + ( border * 2); 使用了box-sizing之后盒子实际宽(高) 就等于 wid ...

  3. 【java基础】成员变量和局部变量

    成员变量和局部变量 根据定义变量位置的不同,可以将变量分为成员变量和局部变量        成员变量是在类范围内定义的变量        局部变量是在一个方法内定义的变量   成员变量可以分为:   ...

  4. iOS开发 二维码生成

    基于libqrencode的二维码生成 + (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size { ...

  5. OpenCV计算点到直线的距离 数学法

    我们在检测图像的边缘图时,有时需要检测出直线目标,hough变换检测出直线后怎么能更进一步的缩小区域呢?其中,可以根据距离来再做一判断,就涉及到了点与直线的距离问题. 点到直线距离代码如下: //== ...

  6. 严重:Error listenerStart

    转自: http://1985wanggang.blog.163.com/blog/static/7763833200942611050436/ 近日浏览论坛,发现好多人提问,都说在运行web程序时, ...

  7. 反斜杠在JSP中的两种不同的含义

    / 在不同条件下的不同含义 / 代表WEB应用的根路径的情况:/ 交给 Servlet容器来处理 请求转发时: request.getRequestDispatcher("/xxxx&quo ...

  8. XUtils3 的 环境搭建

    XUtils3 的 环境搭建 环境搭建三部曲 ----------------------- 说明 : author  修雨轩陈 使用andorid Studio 已经创建了一个项目 并且自己需要使用 ...

  9. Application.Run()和Form.Show()以及Form.ShowDialog()

    ShowDialog()弹出模式化的窗体 Show()弹出非模式化的窗体 模式窗体,在关闭或隐藏前无法切换到主窗体. 非模式窗体,变换焦点使不必关闭窗体 总结:显示重要的信息,还是用模式窗体,如删除文 ...

  10. jquery1:

    在jquery中:1.window.onload: --->$();所以一般jquery用如下开头: $(function(){ })2.获取元素:$('#div'):获取id为div的元素$( ...