zoukankan      html  css  js  c++  java
  • 关于std容器类的内存使用

    关于std容器类的内存使用
    最近公司的一个项目,内存使用不断增长,最终被kill。但查了好几天确实没有内存泄漏,最后找到了真凶:1是对std容器类使用不当,2是new/delete太多太频繁会有内存碎片。
    1、vector类
        其实就相当于数组,每插入一个元素,就会在堆上new一个元素。
        这些元素占用的空间在clear()的时候,并没有被free掉,只有在vector对象生命周期结束时,才会free掉。
        定义vector的指针;使用完以后再delete,就能释放vector的对象。
        std::vector<int> *p = new std::vector<int>;
        //...push_back等操作
        delete p;
       
        还有一种释放的方法,用swap()
        std::vector<int> p
        p.swap(vector<int> ());
       
        如果不想每插入一个元素就malloc一次,可以用reserve();
        std::vector<int> p
        p.reserve(16);       
        //这里只是分配了16个元素的空间,但vector里元素的个数还是0, 即p.size()等于0
        //p.capacity()查看已经分配多少个元素的空间。
       
    2、set和map
        每插入一个元素,就会在堆上new一个元素。
        但和vector不同的是,erase的时候元素占用的空间会被free掉,当然生命周期结束也会free的。

  • 相关阅读:
    Spark笔记:RDD基本操作(下)
    Spark笔记:RDD基本操作(上)
    使用mapreduce计算环比的实例
    Hbase学习笔记01
    周爱民:真正的架构师是没有title的(图灵访谈)
    google map 路线服务
    Google Maps V3 之 路线服务
    CSS3支持box-flex弹性布局
    php curl用法
    .frm,.myd,myi转换为.sql导入数据库
  • 原文地址:https://www.cnblogs.com/GoodGoodWorkDayDayUp/p/1892161.html
Copyright © 2011-2022 走看看