Имеют ли ArrayBuffers максимальную длину?


Я тут немного запутался. Выделяет ли ArrayBuffer для него новую область памяти? Если да, то каков будет безопасный максимальный размер капли, чтобы положить на него?

3 5

3 ответа:

Это зависит только от вашей системы, и, кажется, нет предела.

Согласно спецификации:

Если запрошенное число байт не может быть выделено исключение поднятый.

Каков будет безопасный максимальный размер большого двоичного объекта, чтобы поместить его на него

Кажется, что нет жестких ограничений, просто какие бы ограничения ни накладывала ваша платформа.

Однако, если используется какой-то индексированный доступ, индексы не должны быть больше числа .MAX_SAFE_INTEGER , потому что иначе случались бы интересные ошибки.

К счастью, 2^53-1 байт-это около 8 петабайт, так что это не будет проблемой, если вы не делаете что-то действительно странное.

Я тоже задавал себе тот же вопрос. Похоже, что буфер ограничен доступной системной памятью и способностью базового ядра JavaScript GC обрабатывать большие объемы памяти. Вы можете легко протестировать его для своей платформы, создав большие буферы в консоли браузера и с другой стороны, контролируя процесс браузера и общий объем памяти.

Мне только что удалось создать буферы размером более 512 Мб на Chrome 37. Однако у меня есть 4 ГБ системной памяти, так что он может очевидно, привести к краху после большего распределения. Я не заинтересован в поиске точки разрыва, так как я в порядке с выделениями до 100 МБ, но вы, очевидно, можете легко проверить это для себя.