在哈希容器中存储持久的v8对象句柄
Storing persistent v8 object handles in a hashed container
我想在哈希类型容器中存储v8::Persistent<v8::Object>
句柄(更准确地说是Google dense_hash_set
)。我需要实现我自己的哈希函数吗?我可以依靠v8::Object::GetIdentityHash
方法的哈希值?戳一下代码,我可以看到他们基本上只是为对象生成一个随机的32位数字并缓存它。这是否足以避免哈希冲突?
我的答案是,是的,它可以用作散列键,但是…
由此可见,int v8::Object::GetIdentityHash()
:
返回该对象的标识哈希值。
当前实现使用对象to的隐藏属性存储标识哈希值
返回值永远不会为0。而且,也不能保证是独一无二的。
它可能会为不同的对象生成相同的键,并且可能会有碰撞。然而,这不足以成为放弃这个函数的理由。
问题是保持低碰撞率。这取决于GetIdentityHash
的分布和哈希表的大小。
你可以测试它,计算碰撞次数,看看它是否会损害你的性能?
相关文章:
- 从 JS (V8) 中C++对象的引用调用函数
- V8 无法使用名称设置对象模板"console"
- 如何在V8中为C 本机对象实现属性枚举器
- v8 回调不适用于堆上的 JavaScript 对象
- 如何在嵌入式V8中重置全局对象
- V8从C 中的nodejs提取全局对象
- C++ V8 对象上下文
- 在v8中,使用cpp对象作为参数执行js函数
- 在 Nodejs/V8 扩展中通过 Javascript 将C++对象传递给C++函数
- 如何在Google V8 Javascript引擎中使对象不可变
- 如何使用V8从C++访问和调用Javascript对象属性和方法
- 我怎样才能得到一个v8函数来返回一个c++对象
- V8如何获取作为参数提供的对象键值
- 如何解析c++ v8中的参数对象
- v8::ScriptCompiler::Source对象-此对象可以保留或稍后检索
- 在Node插件中将c++对象封装为v8对象
- 为Node.js插件在void *中检索和存储V8对象
- 在Node.js和v8中调用一个使用包装对象作为参数的函数
- 在哈希容器中存储持久的v8对象句柄
- 将v8对象转换为自定义c++对象