研究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 人物。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top