javascript – 为什么创建多个单态缓存而不是一个多态
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 为什么创建多个单态缓存而不是一个多态,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1097字,纯文字阅读大概需要2分钟。
内容图文
![javascript – 为什么创建多个单态缓存而不是一个多态](/upload/InfoBanner/zyjiaocheng/727/8e9b4af2a08a49a289bb51503f4e4ac5.jpg)
我在单态上读到this article,那里有以下代码片段:
function ff(b, o) {
if (b) {
return o.x
} else {
return o.x
}
}
ff(true, { x: 1 })
ff(false, { x: 2, y: 0 })
ff(true, { x: 1 })
ff(false, { x: 2, y: 0 })
How many property access inline caches are in the function ff? What’s
state they are in?
Answers: there are 2 caches, both are monomorphic because each sees only objects of one shape.
我以为会有一个多态,因为之前的作者显示:
f({ x: 4, y: 1 }) // polymorphic, degree 2
f({ x: 5, z: 1 }) // polymorphic, degree 3
f({ x: 6, a: 1 }) // polymorphic, degree 4
f({ x: 7, b: 1 }) // megamorphic
该函数传递不同结构的对象,并将单形缓存变为多态.为什么与有问题的例子有所不同?
解决方法:
那些“内联缓存”事物存在于代码中的每个不同属性引用中.因此在功能中:
function ff(b, o) {
if (b) {
return o.x // IC here
} else {
return o.x // IC here
}
}
这两个返回语句都有自己的内联缓存.由于在示例中调用函数的方式,第一个返回仅发生在第一个形状的对象上,第二个返回仅发生在第二个形状的对象上.因此,每个缓存(在对ff()的四次调用之后)将只看到1个形状.
第五次调用函数后,如下所示:
ff(true, { x: 1, z: 10 });
第一个IC会看到两种形状,因此它的IC将是多态的.
内容总结
以上是互联网集市为您收集整理的javascript – 为什么创建多个单态缓存而不是一个多态全部内容,希望文章能够帮你解决javascript – 为什么创建多个单态缓存而不是一个多态所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。