【问题标题】:Javascript maximum size for types?Javascript类型的最大大小?
【发布时间】:2011-06-09 08:57:42
【问题描述】:

查看 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 值。

但是我没有看到任何关于对象的东西。

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

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

【问题讨论】:

    标签: javascript cross-browser ecma262


    【解决方案1】:

    正如您已经说过的,规范确实没有说明除 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 做同样的事情。

    【讨论】:

    • 那么这类信息真的没有中心区域吗?
    • 不是真的,但是如果你再次达到这些限制,你很可能会做一些不适合浏览器环境的事情:) 虽然获取信息仍然很有趣,但是作为我说你必须在谷歌等上做很多挖掘才能找到它。
    • 与任何其他语言一样,询问what is the maximum length of a string 类似于询问how mush RAM does the computer have。实现可能会或可能不会限制它(例如 Chrome 的情况),但归根结底,字符串只是一个字节数组(事实上,在大多数 javascript 解释器中,它只是一个围绕空终止的薄包装器C 字符串)。
    • @siebetman 确实如此,但我们在实践中受到实现或 cpu 架构的限制...cplusplus.com/reference/string/string/max_size 程序有设置内存大小吗?如果我们要研究“云中的一切”这个想法,很多问题都很重要。
    • @slebetman OP 询问了“我可以安全地在浏览器中使用的 Javascript 字符串的最大长度是多少?”。这是一个有效的问题,根本不像问“计算机有多少 RAM”。物理内存只是一个的限制因素。其他更严格的约束限制了字符串的长度。现在,在 2015 年,当字符串长度为 2^28 个字符时,Chrome 仍然会爆炸。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-03-12
        • 2019-01-02
        • 1970-01-01
        • 2023-04-08
        • 2015-12-07
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多