0

v8::Persistent<v8::Object>ハンドルをハッシュ型コンテナー (より正確には Google )に格納したいと思いdense_hash_setます。これには独自のハッシュ関数を実装する必要がありますか? v8::Object::GetIdentityHashハッシュ値のメソッドに依存できますか? コードを調べてみると、基本的にオブジェクトの 32 ビットの乱数を生成してキャッシュしているだけであることがわかります。ハッシュの衝突を避けるにはそれで十分ですか?

4

1 に答える 1

1

私の答えは、はい、ハッシュキーとして使用できますが...

これによるint v8::Object::GetIdentityHash()と、

このオブジェクトの ID ハッシュを返します。

現在の実装では、オブジェクトの隠しプロパティを使用して ID ハッシュを格納します。

戻り値が 0 になることはありません。また、一意であるとは限りません。

異なるオブジェクトに対して同じキーを生成する可能性があり、衝突が発生する可能性があります。ただし、この機能を放棄する十分な理由にはなりません。

問題は、衝突率を低く保つことです。GetIdentityHashまた、ハッシュテーブルの分布とサイズに依存します。

あなたはそれをテストして衝突を数え、それがあなたのパフォーマンスにダメージを与えているかどうかをチェックすることができます?!

于 2013-03-09T07:43:35.457 に答える