ECMAScript / JavaScript字符串中的每个字符占用多少RAM?

时间:2011-08-27 20:01:42

标签: javascript string

问题很简单:ECMAScript / JavaScript字符串中的每个字符占用多少RAM(以字节为单位)?

我猜两个字节,因为标准说他们存储为16位无符号整数?

这是否意味着每个字符总是两个字节?

1 个答案:

答案 0 :(得分:8)

是的,我相信情况就是这样。字符可能存储为宽字符串或UCS2字符串。 它们可能是UTF-16,在这种情况下,对于BMP(基本多语言平面)之外的字符,它们每个字符占用两个字(16位整数),但我相信这些字符不完全支持。在ECMA的UTF16实现中阅读此blog post about problems

大多数现代语言使用两个字节字符存储其字符串。这样您就可以完全支持所有口语。它需要一点额外的内存,但对于任何具有multiGig RAM的现代计算机来说都是花生。将字符串存储在更紧凑的UTF8中将导致处理更复杂和更慢。因此,UTF8主要用于运输。 ASCII仅支持没有变音符号的拉丁字母。 ANSI仍然有限,需要指定的代码页才有意义。

ECMA-262的第4.13.16节明确将“字符串值”定义为“原始值,它是零个或多个16位无符号整数的有限有序序列”。 建议程序使用这些16位值作为UTF-16文本,但使用字符串存储任何不可变的unsigned short数组是合法的。

请注意,字符大小并不是构成字符串大小的唯一方法。我不知道确切的实现(它可能会有所不同),但字符串往往有一个0x00终结符,使它们与PChars兼容。他们可能有一些包含字符串大小的标题,也许还有一些引用计数甚至是编码信息。一个字符的字符串很容易消耗10个字节或更多(是的,那是80位)。