gpt4 book ai didi

optimization - 清零 V8 的 `hidden classes` 概念

转载 作者:行者123 更新时间:2023-12-03 15:29:10 25 4
gpt4 key购买 nike

我读过一些关于 V8 隐藏类的文章。不过,我脑子里还有几个问题:

假设有两个对象:

var a = { }
a.x = 5
a.y = 6

var b = { }
b.y = 7
b.x = 8

他们最终会使用相同的隐藏类还是仅仅因为一个而分开 0 + x + y和另一个 0 + y + x ?据我了解,他们有不同的类(class),但只是想确保我得到了它。

然后,我们有这个案例:
function Point(x, y) {
this.x = x
this.y = y
}
var a = new Point(7, 8)

var b = { }
b.x = 6
b.y = 8

var c = {
x: 8,
y: 9
}

var d = {
y: 9,
x: 80
}

我们最终会得到相同的隐藏类吗?我可能猜到 a , bc做但 d没有。除非对这样的对象表达式进行了一些排序(类似于为类型分析数组的短声明)。

最后,我们有这个:
function PointA(x, y) {
this.x = x
this.y = y
}
var a = new PointA(7, 8)

function PointB(x, y) {
this.x = x
this.y = y
}
var b = new PointB(7, 8)

这有点类似于第二种情况。这些对象看起来相同,只是它们的来源 ( instanceof... ) 不同。但是,是否有对象最终具有相同的隐藏类?

最佳答案

如果您下载 V8 并构建调试版本,您可以将这些对象随机传递给一个无限的函数
循环并让它打印优化的反汇编,看看它们是否被视为具有相同的类。

在第一种情况下,您是对的,它们将具有不同的隐藏类。

在第二种情况下你错了,你最终会得到 4 个不同的类,所以它们都不共享一个类。

首先,在构造函数或对象字面量之外添加到对象的字段不会直接存储
在对象上,但在对象外部的数组中。这就是为什么b每个人都会有不同的隐藏类(class)。

唯一构造函数将构造唯一类的对象,因此 a每个人都会有不同的隐藏类(class)。物体
文字具有不同顺序的属性,这与第一种情况相同。

然而,具有完全相同布局的对象字面量将共享一个隐藏类,因此如果我们添加对象 e :

var e = {
x: 32,
y: -15
};

然后 c将与 e 共享相同的隐藏类.

在第三种情况下,出于与第二种情况相同的原因,它们将具有不同的隐藏类,唯一的构造函数
构造不同类的对象。

您可能还会发现这个有趣的 https://codereview.stackexchange.com/a/28360/9258

关于optimization - 清零 V8 的 `hidden classes` 概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17925726/

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