so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數據加載中……

          調查: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 閱讀(2591) 評論(0)  編輯  收藏 所屬分類: C&C++

          主站蜘蛛池模板: 石台县| 宜春市| 田东县| 霍邱县| 扶余县| 澎湖县| 寻乌县| 小金县| 邹城市| 达日县| 沈阳市| 安阳县| 兴宁市| 普安县| 明星| 观塘区| 临夏县| 聂荣县| 唐海县| 广西| 六枝特区| 唐山市| 比如县| 双牌县| 凉城县| 馆陶县| 项城市| 家居| 班戈县| 昌图县| 河池市| 温泉县| 信宜市| 贡山| 齐河县| 平南县| 清新县| 儋州市| 南华县| 大丰市| 平顶山市|