问题非常简单:ECMAScript/JavaScript 字符串中的每个字符消耗多少 RAM(以字节为单位)?
我会猜测两个字节,因为标准说它们存储为 16 位无符号整数?
这是否意味着每个字符始终是两个字节?
是的,我相信情况确实如此。这些字符可能存储为宽字符串或 UCS2 字符串。
它们可能是 UTF-16,在这种情况下,对于 BMP(基本多语言平面)之外的字符,它们每个字符占用两个单词(16 位整数),但我相信这些字符并未得到完全支持。读这个关于问题的博客文章在 ECMA 的 UTF16 实现中。
大多数现代语言都用两个字节字符存储字符串。这样您就可以获得对所有口语的全面支持。它会花费一点额外的内存,但这对于任何具有多千兆内存的现代计算机来说都是微不足道的。以更紧凑的 UTF8 存储字符串将导致处理更复杂且更慢。因此,UTF8 主要仅用于传输。 ASCII 仅支持拉丁字母,不带变音符号。 ANSI 仍然受到限制,需要指定的代码页才能有意义。
第 4.13.16 条ECMA-262明确将“字符串值”定义为“原始值,它是零个或多个 16 位无符号整数的有限有序序列”。它suggests程序使用这些 16 位值作为 UTF-16 文本,但简单地使用字符串来存储任何不可变的无符号 Short 数组是合法的。
请注意,字符大小并不是构成字符串大小的唯一因素。我不知道确切的实现(并且可能有所不同),但字符串往往有一个 0x00 终止符以使它们与 PChar 兼容。它们可能有一些标头,其中包含字符串大小,可能还有一些引用计数甚至编码信息。包含一个字符的字符串很容易消耗 10 个字节或更多(是的,那就是 80 位)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)