13

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

我一直在以痛苦的方式这样做,因为我找不到任何关于此的规范,但是不断的浏览器崩溃使这是一个痛苦的试验(由于某种原因,try catch 似乎对这个特定问题毫无用处)。

我也在寻找有关其他类型的最大存储大小的信息(数组、对象、函数、字符串、数字、布尔值......)

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

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

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

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

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

但后来我看不到任何关于物体的东西。

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

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

4

3 回答 3

7

正如您已经说过的,该规范没有说明Number.

所以这绝对是留给实现的。

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

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

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

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

于 2011-01-14T19:51:16.377 回答
5

ECMA 第 6.1.4 节对此进行了明确说明。

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

于 2016-05-06T20:37:41.077 回答
-1

我在另一个答案中列出了字符串的一些典型限制。基本上,您处于安全区域,字符串长度最多为 2 27个字符。

于 2015-03-03T21:10:41.123 回答