Javascript最大尺寸类型?

时间:2011-01-14 19:43:00

标签: javascript cross-browser ecma262

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

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

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

EMCA-262第8.4节对此有些含糊其辞

  

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

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

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

  

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

但后来我没有看到任何关于物体的事情。

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

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

3 个答案:

答案 0 :(得分: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做同样的事情。

答案 1 :(得分:5)

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

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

答案 2 :(得分:0)

我列出了another answer中字符串的一些典型限制。基本上,您处于安全区域,字符串长度为2 27 字符。