战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

hash_map不是标准库,因此不同平台下包含头文件不同, 前缀也不同,这里使用了一个通用定义

   1:  #ifdef _WIN32
   2:      #include <hash_map>
   3:      #define HASHMAP_PREFIX stdext
   4:  #else
   5:      #include <ext/hash_map>
   6:      #define HASHMAP_PREFIX __gnu_cxx    
   7:  #endif

对于初始桶大小设置,Linux下使用hash_map构造函数可以设置, Windows下则没有对应的设置函数.

查阅Windows下hash_map的源码,并在hash_map()默认构造函数旁边添加一个测试用初始桶设置函数

   1:      hash_map( size_type _Buckets )
   2:          : _Mybase(key_compare(), allocator_type())
   3:      {
   4:          _Init( _Buckets );
   5:      }

接下来使用相同的测试代码

   1:      const uint32 Buckets = 1000;
   2:      HASHMAP_PREFIX::hash_map<uint32,uint32> MyHash( Buckets );
   3:   
   4:      TimeRuler Ruler;
   5:      for ( uint32 i = 0; i <1000000;i++)
   6:      {
   7:          MyHash[i] = i;
   8:      }
   9:   
  10:      printf("%d\n", Ruler.GetCostTime() );

这里的TimeRuler是使用boost timer的时间戳封装

Release下测试结果:

    OS \ Buckets           8 ( default )         1000
     Win7          430ms       560ms
     Mint( VMware )          127ms       127ms

 

Windows的测试结果说明, 不给出桶初始化函数是正确的, 默认管理比自己设置更高效.

Linux平台感觉很诡异, 不清楚是不是虚拟机造成的结果不准确

posted on 2012-02-23 18:54 战魂小筑 阅读(1557) 评论(0)  编辑 收藏 引用 所属分类: 网络 服务器技术C++/ 编程语言

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理