C ++在发布模式下预编译模板类

时间:2013-07-12 12:34:55

标签: c++ performance visual-studio-2012 hashmap

为了保存和访问hashmap中的很多元素,我想测试Google的Sparse Hash Map:https://code.google.com/p/sparsehash/

我刚刚使用调试模式编译了VS2012中的所有测试和演示。好吧结果非常慢,例如time_hash_map.exe打印“map_grow 50053.ns”,平均迭代次数为10.000.000次。好的..现在我在发布模式下编译它的差异是巨大的! map_grow 917.0ns!首先我认为这是因为优化正在删除测试程序中的一些内容,但现在我已经在我自己的程序中实现了dense_hash_map,它实际上很慢,而在发布模式下它非常快。

我仍在处理我的程序,并且在发布模式下进行调试有时会很麻烦,所以我尝试使用所需的模板参数预编译dense_hash_map。我创建了第二个包含cpp文件的库:template google::dense_hash_map<uint64_t, int>;我在Release模式下编译了这个库,并将它链接到我的主应用程序,但性能仍然相同:(

我可以做些什么来编译这个类(dense_hash_map<key,val>)并进行优化,而其余的程序是在没有优化的情况下编译的。

我认为这个巨大的性能提升也非常质疑,我看到了一些不错的优化效果,但是这个?它比每次迭代快50倍。

修改  看起来甚至禁用运行时检查并且启用优化不会导致与发布模式相同的速度(仍然高达10倍速),我的新调试模式和原始发布模式之间的唯一区别是/ MT for release和/ MTd for我的调试模式。

0 个答案:

没有答案