Сколько оперативной памяти занимает каждый символ в строке ECMAScript / JavaScript? - PullRequest
4 голосов
/ 28 августа 2011

Вопрос довольно прост: сколько ОЗУ в байтах потребляет каждый символ в строке ECMAScript / JavaScript?

Я собираюсь угадать два байта, поскольку стандарт говорит, что они хранятся как 16-битныецелые числа без знака?

Означает ли это, что каждый символ всегда состоит из двух байтов?

1 Ответ

8 голосов
/ 28 августа 2011

Да, я верю, что это так.Символы, вероятно, хранятся как широкие строки или строки UCS2.Они могут быть UTF-16, и в этом случае они занимают два слова (16-битные целые) на символ для символов вне BMP (базовая многоязычная плоскость), но я считаю, что эти символы поддерживаются не полностью.Прочитайте сообщение в блоге о проблемах в реализации ECMA в UTF16.

Большинство современных языков хранят свои строки с двухбайтовыми символами.Таким образом, вы получаете полную поддержку всех разговорных языков.Это стоит немного дополнительной памяти, но это арахис для любого современного компьютера с ОЗУ MultiGig.Хранение строки в более компактном UTF8 приведет к более сложной и медленной обработке.Поэтому UTF8 в основном используется только для транспортировки.ASCII поддерживает только латинский алфавит без диакритических знаков.ANSI все еще ограничен и нуждается в определенной кодовой странице, чтобы иметь смысл.

Раздел 4.13.16 из ECMA-262 явно определяет "String value" как "примитивное значение, которое является конечным упорядоченнымпоследовательность из нуля или более 16-битных целых чисел без знака ". предлагает , чтобы программы использовали эти 16-битные значения в качестве текста UTF-16, но допустимо просто использовать строку для хранения любого неизменяемого массива шорт без знака.

Обратите внимание, что размер символане единственное, что составляет размер строки.Я не знаю о точной реализации (и она может отличаться), но строки, как правило, имеют терминатор 0x00, чтобы сделать их совместимыми с PChars.И у них, вероятно, есть некоторый заголовок, который содержит размер строки и, возможно, некоторую информацию о пересчете и даже кодировании.Строка с одним символом может легко занимать 10 или более байтов (да, это 80 бит).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...