so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0

          導航

          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(8)

          隨筆分類(157)

          隨筆檔案(158)

          牛人博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          調查:map在clear之后并沒有釋放內存

          http://jdoc.iteye.com/blog/1217804
          http://valgrind.org/docs/manual/ms-manual.html
          http://manyhappy163.blog.163.com/blog/static/16447683120105174149969/
          http://hi.baidu.com/algorithms/item/77e5c6bfed350d77244b097f
          經過調查,結論是:
          1。map不能使用swap的方式來強制釋放內存;
          2。map用的allocator,新版gcc用new_allocator,不存在pool的問題;
          3。根本原因是free函數(libc內部實現),并沒有把你內存真正的釋放,這個與free的內部實現機制有關了。
          下面是一個小的測試程序
          $ cat test_mem_seg.cpp 
          #include <vector>
          #include <malloc.h>
          #include <stdio.h>
          #include <iostream>
          #include <stdlib.h>
          int main(int argc, char* argv[]) {
              std::vector<void*> v;
              int block_len = 120;
              if (argc > 1) {
                  block_len = atoi(argv[1]);
              }
              for (int i = 0; i < 1024 * 1024; ++i) {
                  char* p = (char*)malloc(block_len);
                  sprintf(p, "%d", i);
                  v.push_back(p);
              }
              std::cout << "\n===============malloc (block unit size:" << block_len << ") ok==============\n";
              malloc_stats();
              for (int i = 0; i < 1024 * 1024; ++i) {
                  free(v[i]);
              }
              std::cout << "\n===============free  (block unit size:" << block_len << ") ok==============\n";
              malloc_stats();
          }

          posted on 2014-09-18 14:26 so true 閱讀(2590) 評論(0)  編輯  收藏 所屬分類: C&C++

          主站蜘蛛池模板: 凤庆县| 龙岩市| 临朐县| 城步| 中卫市| 象州县| 北票市| 九龙城区| 界首市| 鄱阳县| 宜章县| 隆安县| 江门市| 封开县| 罗江县| 旺苍县| 聂拉木县| 冀州市| 屏东县| 纳雍县| 泰安市| 嘉荫县| 体育| 平邑县| 盐山县| 长沙县| 桦甸市| 德格县| 济南市| 子长县| 台州市| 宜良县| 丰台区| 鄂州市| 乐山市| 双流县| 大兴区| 津南区| 兴安盟| 抚顺县| 高安市|