Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1018325
  • 博文数量: 87
  • 博客积分: 3324
  • 博客等级: 中校
  • 技术积分: 1003
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-17 11:37
文章分类

全部博文(87)

文章存档

2014年(3)

2013年(5)

2012年(21)

2011年(13)

2010年(7)

2009年(9)

2008年(4)

2007年(14)

2006年(11)

分类: C/C++

2009-01-21 18:02:52

一直都想知道ACE实现的容器和STL的容器究竟谁更高效。做了一个小小的测试来检验STL hash_map和ACE的hash_map的效率。该测试在Debian Etch 上运行,机器大概是Intel(R) Pentium(R) 4 CPU 2.66GHz。
在系统基本空闲的情况下,建立一个10万2千条大小的hash表,执行同样多次(10万2千次)的查询。本测试只比较查询时间和占用内存大小。因为大多数时候,对hash表来说都是在查询的。总共有四个程序,分别是STL的hash_map,string和ACE的ACE_Hash_Map_Manager_Ex,ACE_CString组合而成。下面是结果每个程序运行三遍的平均结果。程序内存大小,由于还有别的一些东西占用内存,故大小仅供参考,但可从不同程序之间的差异大致看出不同容器的内存占用情况。另顺便把STL的map也放进来了,让大家也参考一下。

 程序  内存占用大小(KB)  查询时间(秒)
STL的map和string
 13476
 0.197
STL的string和hash_map  13456  0.06
STL的hash_map和ACE_CString
 15104  0.07
ACE_Hash_Map_Manager_Ex和ACE_CString
 13361
 0.99
ACE_Hash_Map_Manager_Ex和STL string
 12676
 1.21

注意:不同的hash函数实现可能导致不同的hash查询速度和内存占用大小。本处对于string都是用STL默认的hash函数。只有ACE_Hash_Map_Manager_Ex和ACE_CString的组合使用的ACE自带的hash函数。

结论:
我在网上看到很多人谈到ACE的容器的时候,都是说“据说,ACE的容器比STL的更高效”,从此次测试可以看出,这种说法不果是以讹传讹!可以看出STL自己的hash_map搭配自己的string还是最好的组合。
阅读(2814) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~