【发布时间】:2021-07-31 08:58:54
【问题描述】:
我很好奇 v8 的内部结构以及 Map 是如何在底层实现的。对比Maps,javascript 对象不能将对象作为键。据我了解Maps 以经典的哈希映射方式实现查找。一些散列函数将输入键映射到某个输出整数,该整数用作数组中的索引。然后在数组溢出时进行一些动态调整大小,并且在数组的每个 bin 中都有一些链表。可能 v8 的地图细节更复杂一些,它们涉及到一些针对小Maps 的优化?很想知道实际的实现与我上面的草图有多大不同。基于Map 在底层工作方式的假设,它如何从普通对象映射到数组中的键?我猜它会将指针地址取模到数组中?
想深入挖掘。
【问题讨论】:
-
如果您对具体细节如此感兴趣,您是否看过代码?
-
不,但公平点,我可能应该 ????。我说这是正确的文件是否正确? github.com/v8/v8/blob/master/src/objects/map.cc 可能会尝试梳理一下并写下我自己问题的答案
-
看起来这个文件更相关。我链接的上一个文件与所有对象 afaics 更相关。 github.com/v8/v8/blob/master/src/objects/ordered-hash-table.h
标签: javascript dictionary v8 es6-map