代码之家  ›  专栏  ›  技术社区  ›  pablo

C哈希表与C++ HASHYMAP映射

  •  0
  • pablo  · 技术社区  · 15 年前

    我比较下面的C++代码和C语言和C语言(MUNO 2.4)似乎更快。C++代码有什么问题吗?

     #include <map>
     #include <string>
     #include <iostream>
     #include <ext/hash_map>
     #include <boost/any.hpp>
    
     int main()
     {
        //std::map<long, long> m;
        // hash_map is a little bit faster
        __gnu_cxx::hash_map<long, long> m;
    
        for( long i = 0; i < 1000000; ++i )
        {
            m[i]  = i;
        }
    
     }
    

    和C

     using System;
     using System.Collections;
    
     public int Main()
     {
         Hashtable m = new Hashtable();
    
         for( long i = 0; i < 1000000; ++i )
         {
            m[i]  = i;
         }
    
    }
    

    在同一台机器上,C代码的速度实际上是它的两倍。

    $ time ./a.out
    
    real    0m1.028s
    user    0m0.986s
    sys     0m0.041s
    
    $ time mono test.exe
    
    real    0m0.603s
    user    0m0.732s
    sys     0m0.090s
    
    2 回复  |  直到 15 年前
        1
  •  8
  •   Crashworks    15 年前

    您需要编译C++代码,编译器优化打开,以便进行公平的比较。否则,您将比较apple来调试构建-编译器甚至不会 尝试 发出快速代码。

    在GCC中,这将是 -O3 标志,以开始。

        2
  •  4
  •   csl    15 年前

    一些想法:

    • 你在比较单声道和增强型
    • Mono和C++使用了哪种优化(默认或不设置)设置?
    • C和C++版本的初始/默认哈希表大小是什么?
    • 您是否尝试与其他C++哈希映射进行比较,例如 the sparse hash table ?
    • 记住不仅要看 真实的 时间,但实际使用的CPU时间。