注: 使用的dlmalloc为2.8.3版本

使用GetTickCount(),测试1000000次的new/delete
分配空间大小为2的幂,依次递增

在Debug模式下
sgi-stl alloc > dlmalloc > ::operator new

在Release模式下
dlmalloc > sgi-stl alloc > ::operator new

以下数据为Release模式下测得
测试程序1

    for (size_t n=0; n<Times; ++n)
    {
        Test *p = new Test;
        delete p;
    }

数据
---------
字节数        ::operator new        sgi-stl alloc        dlmalloc                次数
 < 128                  329                    156                    31                    1000000
 < 262132          1000                    953                    31                    1000000
 > 262132            984                    969              15547                    1000000

测试程序2

    for (size_t n=0; n<Times; ++n)
    {
        Test *p = new Test;
    }

数据
---------
字节数        ::operator new        sgi-stl alloc        dlmalloc                次数
          1              422                      94                      32                    1000000
        64              484                    156                      94                    1000000
      128              547                    219                    157                    1000000
262132                16                    失败                  844                          1024
524264                94                    失败                1532                          1024

需要说明的是,sgi-stl alloc失败时竟然会报告:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
O_O!

结论
---------
sgi-stl alloc在<=128 bytes下,成绩约为::operator new的一倍,否则与之相同
可怕的是dlmalloc,几乎都是常数级别
在大量new后马上delete的这种状况下,dlmalloc在<262132下行为同上,而一旦超过,则效率剧降,成绩为::perator new的15倍 =。=b
我想应该是跟算法有关(见侯捷老师的《池内春秋》)
当new时,现存的链表空间不足时,会重新分配构成新的,或者找其他几个“低一级”的要“连续的内存”,然后delete后又会“返还”?!导致的吧。

不管怎样,dlmalloc都会是我的最终选择,Doug Lea 果然不是一般的强,一辈子在搞malloc的人,不一样,就是不一样!admire~
m(_ _)m

::operator new、sgi stl alloc、dlmalloc测试结果相关推荐

  1. 有关SGI STL的alloc

        在STL的使用者层面上,空间配置器一般是隐藏的,使用者不需要知道其具体实现细节即 可进行使用:但是从STL的实现角度来说,由于整个STL的操作对象都存放在容器之内,而容器 需要配置一定的空间来 ...

  2. SGI STL中的alloc

    1. SGI STL实现版本    SGI版本由Silicon Graphics Computer System, Inc公司发展,继承HP版本.所以它的每一个头文件也都有HP的版本声明.此外还加上S ...

  3. SGI STL 空间配置器

    文章目录 一.空间配置器 二.为什么使用空间配置器? 三.construct.h 四.std::alloc的实现 关于std::alloc stl_alloc.h 空间的配置与释放 一级配置器 二级配 ...

  4. sgi stl 之list

    sgi stl 的list实际上是一个双向环形链表 下面是代码 #ifndef C_LIST_H #define C_LIST_H #include "cconstruct.h" ...

  5. SGI STL 学习笔记二 vector

    sequence containers Array Vector Heap Priority_queue List sList(not in standard) Deque Stack Queue S ...

  6. 【STL深入学习】SGI STL空间配置器详解(一)-第一级空间配置器

    一.SGI STL配置器简介 SGI STL的配置器与众不同,它与标准规范不同.如果要在程序中明确使用SGI配置器,那么应该这样写: vector<int,std::alloc> iv; ...

  7. SGI STL源码剖析——空间配置器

    SGI STL源码剖析--空间配置器 前言 空间配置器 SGI空间配置器 内存配置和对象构造 构造和析构 空间的配置和释放 第一级配置器 第二级配置器 空间配置 重新填充 重中之重的内存池 前言    ...

  8. SGI STL 内存分配方式及malloc底层实现分析

    在STL中考虑到小型区块所可能造成的内存碎片问题,SGI STL设计了双层级配置器,第一级配置器直接使用malloc()和free();第二级配置器则视情况采用不同的策略:当配置区块超过128byte ...

  9. 【STL深入学习】SGI STL空间配置器详解(二)-第二级空间配置器

    本文讲解SGI STL空间配置器的第二级配置器. 相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片.不仅仅是碎片的问题,配置时的额外负担也是一个大问题.因为区块越小,额外负担所占 ...

最新文章

  1. JSP数据交互(一)
  2. java writestartarray_jackson的基础知识
  3. 业务逻辑实现方式选择
  4. install命令和cp命令的区别
  5. android自定义url协议,Android自定义URL方案…?
  6. Docker与虚拟机
  7. 关于Java Collections的几个常见问题
  8. centos-修改yum下载源为国内阿里源-
  9. File /usr/bin/pip, line 11, in module sys.exit(__main__._main()) AttributeError: 'module' ob...
  10. 包/logging模块/hashlib模块/openpyxl模块/深浅拷贝
  11. 乐高ev3搭建图_乐高编程培训是什么都教啥?2020可编程机器人积木编程推荐,...
  12. HTML中包含地图和筛选条件,如何实现DedeCMS多条件筛选并以筛选词为标题
  13. Rust盒子玩家追踪、库存查询、Rust服务器数据统计功能更新
  14. Git:合并分支----git merge命令应用的三种情景
  15. MySQL数据库——复杂查询(二)
  16. AI绘画是什么软件?看完你就知道了
  17. 【逆向工程】在PE结构空白区段插入代码
  18. 基于51单片机 + MQ-3酒精传感器 + ADC0832模数转换器 + LCD1602液晶显示器的酒精检测系统
  19. Qt使用三点坐标画圆弧
  20. 中兴ACS服务器软件,AAA基本配置:终于成功完成了真实的ACS4.1与模拟PIX软件的交互 实验成功...

热门文章

  1. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger
  2. 京东方剑指物联网领域
  3. How to Use HTML5 FUll Screen API(怎样使用HTML5全屏接口)
  4. 设计数据库字段或者java中使用boolean型时需谨慎
  5. cookiesession的QA故事[原理篇]
  6. Linux中crontab定时执行python程序
  7. Adt 配置注释模板
  8. 验证URL链接和IP有效性的JS代码(正则表达式)
  9. 跨区域MPLS TE
  10. 关于Linux静态库和动态库的分析