Максимальный размер Javascript для типов?

Вглядываясь в типы javascript, я пытаюсь выяснить, какой максимальный размер хранилища для некоторых типов данных. Например, я создал быстрый рекурсивный алгоритм для увеличения размера var до сбоя браузера, который заканчивается где-то рядом с 128mb (или, может быть, 256) для строк на моей существующей версии chrome.

Я делал это болезненно, потому что я не мог найти никаких спецификаций на этом, но постоянные сбои браузеров делают это болезненным испытанием (попробуйте поймать почему-то бесполезно с этой конкретной проблемой).

Я ищу информацию о максимальном размере памяти для других типов (массив, объект, функции, строки, числа, bools...)

Раздел 8.4 EMCA-262 является неопределенным в отношении этого

Длина строки - это количество элементов (то есть 16-битных значений) внутри нее. Пустая строка имеет длину ноль и поэтому не содержит элементов.

... так что, возможно, это то, что нужно идентифицировать как реализованное в браузерах?

Однако ECMA сообщает нам о номерах, например,

Тип номера имеет точно 18437736874454810627 (то есть 2 ^ 64-2 ^ 53 + 3) значения, представляющие значения 64-разрядного формата IEEE 754 с двойной точностью, как указано в стандарте IEEE для двоичной арифметики с плавающей запятой, за исключением того, что значения 900199254740990 (то есть 2 ^ 53-2) отличные значения "Not-a-Number" стандарта IEEE представлены в ECMAScript как одно специальное значение NaN.

Но тогда я ничего не вижу об объектах.

Что я могу ожидать для использования в браузерах? Есть ли какая-нибудь база кода, которая помогает управлять очень большими объектами и строками?

Сколько памяти я могу выделить в одном script?

Ответы

Ответ 1

Как вы уже сказали, спецификация не указывает любые ограничения по размеру/требованиям для типов помимо Number.

Таким образом, это окончательно оставлено для реализации.

Например, ограничение на строки в Chrome, по-видимому, жестко закодировано со скоростью около 512 Мб (и меньше на 32 бит).

Это максимально ограничивает возможный запрос на распределение в 32-битных версиях 2 ^ 27-1. Максимальная плоская строка длина составляет ~ 2 ^ 28 (пространство 512 МБ), а максимальная длина строки равна 2 ^ 29-1, поэтому ни одна из эти ограничения ловят проблему (мы бы выбрали исключение Out-Of-Memory вместо if они сделали).

Смотрите: http://code.google.com/p/v8/issues/detail?id=362#c9

Что касается других браузеров, для этого потребуется некоторое исследование, например. просматривая код Firefox. Но я сомневаюсь, что мы можем сделать то же самое для IE/Opera.

Ответ 2

В разделе 6.1.4 ECMA явно указано.

"Тип String - это набор всех упорядоченных последовательностей из нуля или более 16-разрядных целых значений без знака (" элементов ") с максимальной длиной 2 ^ 53-1 элементов"

Ответ 3

Я перечислил некоторые типичные ограничения для строк в другом ответе. В принципе, вы находитесь на безопасной территории до строки длиной 2 27 символов.