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. 实验一 DOS

    实验一.DOS实验 一.           实验目的 DOS(Disk Operating System)是一个使用得十分广泛的磁盘操作系统,就连眼下流行的Windows9x/ME系统都是以它为基础 ...

  2. selenium2.0关于python的常用函数(一)

    1.通过标签属性Id查找元素 方法:find_element_by_id(element_id) 实例:driver.find_element_by_id("iptUsername" ...

  3. 使用Asp.Net Core Identity给用户添加及删除角色

    基于Asp.Net Core编制一个项目,需要给用户添加及删除角色的功能,于是使用到了Identity中的UserManager. 先后解决了几个问题,终于实现了设想. 1. 环境条件 Asp.Net ...

  4. Android实现帧动画,以及出场时的动画

    最近有个小需求,在数据上传的时候加一个上传的动画,然后就寻思着自己写一个帧动画 上传开始的时候调用动画,上传结束通知容器将其删除(这个方法应该不会太耗内存),然后吐槽下gif图片还是我自己一帧一帧从p ...

  5. HTML 的 meta 标签

    我们先来看看维基百科上对 meta element 的定义: Meta elements are tags used in HTML and XHTML documents to provide st ...

  6. Guava----Function

    1. Function接口,提供两个方法: apply方法: 可以自定义自己想实现的功能 @Nullable T apply(@Nullable F input); 1. 实例: import com ...

  7. linux系统文件说明

    linux系统文件说明 bin 系统命令目录 dev 设备目录 home 用户的家(每个系统用户在home下都有一个自己家) root超级用户在根目录下 lib 系统库目录.so动态库文件 media ...

  8. Windows 2008 R2+iis7.5环境下Discuz!X3论坛伪静态设置方法

    2008R2不是那么的普及,加上X3版新出不久,所以伪静态的设置教程比较少,今天搞出来了,其实很简单,那么下面给大家简要说明一下.因为iis7.5集成了url重写,那就就方便多了,首先安装好你的dz论 ...

  9. iOS开发中关于像素的几个概念

    DPI与PPI DPI(Dots Per Inch)是印刷行业中用来度量空间点密度用的,这个值是打印机每英寸可以喷的墨汁点数. 计算机显示设备从打印机中借鉴了DPI的概念,由于计算机显示设备中的原子单 ...

  10. Unity Container 应用示例

    一 项目引用Unity 右键项目引用-> 管理Nuget包->搜索unity->安装Unity 和 Unity Interception Extension,如下图所示. 二 创建基 ...