コンパイラー用にいくつかのハッシュ関数を書いていますが、__int64
データ型を頻繁に使用しています。コンパイラは、さまざまなOSでサポートされることを目的としています(これまでのところサポートされています)。私はそれ__int64
が私のターゲットシステムのためにほとんどの主要なC++コンパイラによってコンパイルできるタイプであることを知っているので、それは問題ではありません。私はハッシュ関数を使用して、大きな文字列をより小さく、より速く比較できるようにしています。これらは64ビット対応のOSで驚異的に機能します。しかし、32ビットOSでは、メリットを相殺するのに十分なパフォーマンスの低下がありますか?32ビット整数を使用することもできますが、ハッシュ関数の効果が大幅に低下します。
編集:それはカスタムコードであり、非常に単純です。最初のハッシュ関数は、12文字の英数字(アンダースコアを含む)から一意の64ビット整数を生成します。次に、クラスは64ビットハッシュのアドレスリンクリストを作成して12文字を超えるハッシュを処理し、比較演算子をオーバーロードします。オーバーロードされた比較は短絡され、アドレスリンクリストを比較します。私は自分のマシンでテストを実行して、ランダムに生成された大きなハッシュ(100〜300文字)の速度を自分自身(最悪の場合のシナリオ)と比較しましたが、文字列の比較よりも高速であることがわかりました。ハッシュ生成のオーバーヘッドをより適切にシミュレートするために、事前に生成された大きなハッシュを自分自身と比較する比較テストも実行しました。これはすべて、コード最適化をオフにして実行されています。ハッシュの比較が約10億であるのに対し、文字列の比較は約10億であり、ハッシュは約16%の時間かかりました。ただし、これはすべて64環境で行われました。テストを実行するための32ビットマシンがありません