JavaScript максимальный размер для типов?
-
11-10-2019 - |
Вопрос
Изучая типы 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 персонажи.