Вопрос

Изучая типы JavaScript, я пытаюсь выяснить, каков максимальный размер хранения для некоторых типов данных. Например, я установил быстрый рекурсивный алго, чтобы увеличить размер VAR, пока браузер не сбой, что в конечном итоге находится где -то около 128 МБ (или, может быть, 256) для строк на моей существующей версии Chrome.

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

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

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

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

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

ECMA, однако, рассказывает нам о цифрах, например,

Тип числа имеет ровно 18437736874454810627 (то есть 2^64–2^53+3) значения, представляющие 64-битный формат двойного определения IEEE 754, как указано в стандарте IEEE для арифметики со дворяной, за исключением того 9007199254740990 (то есть 2^53–2) Различные значения «не номера» стандарта IEEE представлены в ECMASCRICT как одно специальное значение NAN.

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

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

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

Это было полезно?

Решение

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

Так что это определенно оставлено для реализации.

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

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

Видеть: http://code.google.com/p/v8/issues/detail?id=362#c9

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

Другие советы

ECMA Раздел 6.1.4 явно об этом.

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

Я перечислил несколько типичных ограничений для строк в другой ответ. Анкет По сути, вы находитесь на безопасной территории до длины струны 227 персонажи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top