我正在为编译器编写一些哈希函数,并且__int64
经常使用该数据类型。该编译器旨在在不同的操作系统上得到支持(到目前为止也是如此)。我知道这__int64
是一种可以由大多数主要 C++ 编译器为我的目标系统编译的类型,所以这不是问题。我正在使用散列函数来使大字符串更小、更快地进行比较,它们在支持 64 位的操作系统上创造了奇迹;但是在 32 位操作系统上是否会有足够大的性能下降来抵消这些好处?我可以使用 32 位整数,但这样会大大降低散列函数的有效性。
编辑:这是自定义代码,非常简单。第一个哈希函数从 12 个字母数字(包括下划线)字符生成一个唯一的 64 位 int。然后一个类通过创建 64 位哈希的地址链表和重载比较运算符来处理超过 12 个字符的哈希。重载的比较被短路并向下比较地址链表。我已经在我的机器上进行了测试,以比较随机生成大散列(100 - 300 个字符)的速度与它们自身(最坏情况下的情况)相比,它被证明比字符串比较更快。为了更好地模拟生成哈希的开销,我还运行了预先生成的大哈希的比较测试,并与它们本身进行比较。这一切都是在关闭代码优化的情况下运行的。使用约 10 亿个哈希比较与约 10 亿个字符串比较,哈希花费了大约 16% 的时间。不过,这一切都在 64 位环境中。我没有 32 位机器来运行测试