gpt4 book ai didi

javascript - V8 如何实现 `Map` 的原始值键?

转载 作者:行者123 更新时间:2023-11-28 17:00:04 24 4
gpt4 key购买 nike

我假设 V8 使用哈希来将对象用作 Map 中的键。

const a = {};
new Map([[a, "a"]]);

问题第 1 部分:V8 如何实现具有原始值键的映射,如下所示?

const a = {};
new Map([[a, "a"], [1, 100], [2, 200])

问题第 2 部分:

像这样的映射怎么样,它包含原始值键,其中这些键都具有相同的类型?

新 map ([[0, 0], [1, 100], [2, 200])

据我所知,将数字映射到数字的最有效方法是使用向量,这样上面的映射就可以像这样实现:

[0, 100, 200]

V8 是否有任何类型的特化沿着这些思路?

我通过基准测试将 Map 与数字数组进行比较,发现 number[] 快了 37%(大致如预期),但不确定到底发生了什么:https://jsperf.com/map-number-number-vs-array

请注意,在基准测试中,数组和映射是动态构建的,而不是像上面的示例中那样一次性构建

最佳答案

V8 开发人员在这里。 V8 以相同的方式实现所有 Map:它们是 HashMap ,并计算 key 的哈希值。计算 01 等数字的哈希值非常简单,因此没有特别的挑战。

V8 不会基于仅查看特定类型的键来执行任何特殊情况。这个想法是:如果您使用Map,您就向引擎发出信号,表示您需要 HashMap 实现,因为您将拥有任意键并希望它们都得到同样好的处理。另一方面,如果您知道您的键始终是一组密集的小数字,则可以使用 Array 而不是 Map,这确实是对于该特定情况更有效(在内存和性能方面)。给你更多的力量!

关于javascript - V8 如何实现 `Map` 的原始值键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com