Javascript最大尺寸类型?

Inc*_*ito 13 javascript cross-browser ecma262

查看javascript类型我试图找出某些数据类型的最大存储大小.例如,我设置了一个快速递归算法来增加var大小,直到浏览器崩溃,最终在我现有版本的chrome上的字符串接近128mb(或者可能是256).

我一直在做这个痛苦的方式,因为我找不到任何关于此的规格,但是持续的浏览器崩溃使得这是一个痛苦的试验(尝试捕获因某些原因在这个特定问题上似乎无用).

我正在寻找有关其他类型的最大存储大小的信息(数组,对象,函数,字符串,数字,bools ......)

EMCA-262第8.4节对此持模糊态度

String的长度是其中的元素数(即16位值).空String的长度为零,因此不包含任何元素.

...所以也许这是需要在浏览器中实现的东西?

然而,ECMA会告诉我们有关数字的信息,例如

Number类型具有18437736874454810627(即2 ^ 64-2 ^ 53 + 3)值,表示IEEE标准二进制浮点运算中指定的双精度64位格式IEEE 754值,但9007199254740990(即,2 ^ 53-2)IEEE标准的不同"非数字"值在ECMAScript中表示为单个特殊NaN值.

但后来我没有看到任何关于物体的东西.

我可以期待在浏览器中使用什么?是否有任何代码库可以帮助管理非常大的对象和字符串?

我可以在一个脚本中分配多少内存?

Ivo*_*zel 7

正如您已经说过的那样,规范没有规定任何类型的尺寸限制/要求Number.

所以这绝对是留给实施的.

例如,Chrome对字符串的限制似乎是硬编码在512mb左右(而在32bit上则更少).

这限制了32位版本的2 ^ 27-1中最大可能的分配请求.最大扁平字符串长度为~2 ^ 28(512MB空间),最大字符串长度为2 ^ 29-1,因此这些限制都没有解决问题(如果他们这样做,我们会抛出一个Out-Of-Memory异常).

请参阅:http://code.google.com/p/v8/issues/detail?id = 362#c9

就其他浏览器而言,这需要一些研究,例如查看Firefox的代码.但我怀疑我们可以为IE/Opera做同样的事情.

  • @siebetman这是非常正确的,但我们在实践中受到实现或cpu架构的限制...... http://www.cplusplus.com/reference/string/string/max_size/是否有一个设置内存大小为程序?如果我们进入这个"云中的一切"想法,那么很多重要的问题. (2认同)

小智 5

ECMA第6.1.4节明确说明了这一点.

"字符串类型是零个或多个16位无符号整数值("元素")的所有有序序列的集合,最大长度为2 ^ 53-1个元素"