gpt4 book ai didi

JavaScript 数字,在内存中的大小都一样吗?

转载 作者:可可西里 更新时间:2023-11-01 01:40:30 26 4
gpt4 key购买 nike

我正在阅读 the Number Type section Professional JavaScript for Web Developers 一书。似乎说所有 ECMAScript 数字都是 binary64 float ,this MDN article 证实了这一点。 .但本书作者还说:

Because storing floating-point values uses twice as much memory as storing integer values, ECMAScript always looks for ways to convert values into integers.

我希望每个数字占用相同数量的内存:64 位。 MDN 文章说,“整数没有特定类型”。有谁知道书作者的意思吗?当整数存储为 64 位 float 时,整数如何占用更少的内存(如果我说得对的话)?您可以在上面的链接中找到整个部分(本书的免费样本)。

最佳答案

JavaScript 除了 double float 之外没有任何其他数字类型(ECMAScript 6 typed arrays 中除外),但底层实现可以选择以任何它喜欢的方式存储数字,只要 JavaScript 代码符合一样。

JavaScript 现在是编译型的,这意味着它可以在许多语言中不明显的方面进行优化。

如果函数中的局部变量只采用整数值并且不会以任何方式暴露在函数外部,那么它实际上可以在编译代码时使用整数类型实现。

不同浏览器的实现不同。目前它似乎在 MS Edge 中产生巨大差异,在 Firefox 中产生巨大差异,而在 Chrome 中完全没有差异:http://jsperf.com/int-vs-double-implementation (注:jsperf 认为 MS Edge 是 Chrome 42。)


进一步研究:

JS 引擎 Spidermonkey (Firefox)、V8 (Chrome、Opera)、JavaScriptCore (Safari)、Chakra (IE) 和 Rhino(可能还有其他引擎,但很难找到实现细节)使用整数的不同方式尽可能将数字类型或存储为整数。一些引述:

"To have an efficient representation of numbers and JavaScript objects, V8 represents both of us with a 32 bits value. It uses a bit to know if it is an object (flag = 1) or an integer (flag = 0) called here SMall Integer or SMI because of its 31 bits."

http://thibaultlaurens.github.io/javascript/2013/04/29/how-the-v8-engine-works/

"JavaScript does not have a built-in notion of an integer value, but for efficiency JavaScriptCore will represent most integers as int32 rather than as double."

http://trac.webkit.org/wiki/JavaScriptCore

"[...] non-double values are a 32-bit type tag and a 32-bit payload, which is normally either a pointer or a signed 32-bit integer."

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Internals

"In Windows 10 and Microsoft Edge, we’ve started optimizing Chakra’s parser and the JIT compiler to identify non const variable declarations of integers that are defined globally and are never changed during the course of the execution time of the program."

https://blogs.windows.com/msedgedev/2015/05/20/delivering-fast-javascript-performance-in-microsoft-edge/

关于JavaScript 数字,在内存中的大小都一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276562/

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