JavaScript类型的最大尺寸?
-
11-10-2019 - |
题
研究JavaScript类型,我正在尝试找出某些数据类型的最大存储大小。例如,我设置了一个快速的递归算法,以增加VAR尺寸,直到浏览器崩溃为止,最终在我现有版本的Chrome上的字符串接近128MB(或可能是256)。
我一直在做这件事,因为我找不到任何规格,但是持续的浏览器崩溃使这是一项痛苦的试验(在这个特定问题上,尝试捕获似乎毫无用处)。
我还在寻找有关其他类型的最大存储大小的信息(数组,对象,功能,字符串,数字,布尔斯...)
EMCA-262第8.4节对此很含糊
字符串的长度是其中的元素(即16位值)的数量。空字符串的长度为零,因此不包含元素。
...所以也许这是需要在浏览器中实现的东西?
但是,ECMA确实告诉我们数字,例如
该数字类型的恰好具有18437736874454810627(即2^64-2^53+3)值,代表IEEE标准在IEEE标准中指定的二进制浮点算术算术的双重精确64位IEEE 754值9007199254740990(即,2^53-2)IEEE标准的不同“ not-a-number”值在Ecmascript中表示为单个特殊NAN值。
但是后来我看不到对象的任何内容。
我可以期望在浏览器中使用什么?是否有任何代码碱体有助于管理非常大的对象和字符串?
我可以在一个脚本中分配多少内存?
解决方案
正如您已经说过的,规格确实 不是 陈述除了类型的任何尺寸限制 /要求 Number
.
因此,这绝对是实施。
例如,Chrome对字符串的极限似乎在512MB左右(较少32位)进行了硬编码。
这将最大可能的分配请求限制在2^27-1的32位版本中。最大平弦长度为〜2^28(512MB空间),最大字符串长度为2^29-1,因此这些限制都没有遇到问题(如果他们确实做到了,我们会抛出过度的异常例外)。
看: http://code.google.com/p/v8/issues/detail?id=362#c9
就其他浏览器而言,这将需要一些研究,例如研究Firefox的代码。但是我怀疑我们可以为IE / Opera做同样的事情。
其他提示
ECMA第6.1.4节对此明确。
“字符串类型是所有有序序列的零或更多16位无符号整数值(“元素”)的集合,最大长度为2^53-1元素”
我列出了一些典型的字符串限制 另一个答案. 。基本上,您处于安全区域,直到2个弦乐长度227 人物。