我正在比较C ++和C#中的以下代码,而C#(Mono 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
答案 0 :(得分:8)
您需要在打开编译器优化的情况下编译C ++代码,以进行公平比较。否则,您正在将苹果与调试版本进行比较 - 编译器甚至不会尝试来发出快速代码。
在GCC中,这将是-O3
标志,开头。
答案 1 :(得分:4)
一些想法: