首页 > 解决方案 > 字符串长度的高位标志

问题描述

有一篇旧文章谈论 .NET/C# 中的一些字符串内部结构。有趣的花絮之一:

m_stringLength
这是字符串的逻辑长度,由 String.Length 返回。因为一些高位用于附加标志以增强性能,所以字符串的最大长度被限制为比 32 位系统的 UInt32.Max 小得多的限制。其中一些标志表明字符串包含简单字符,例如纯 ASCII,并且不需要调用复杂的 UNICODE 算法进行排序和比较测试。

我知道BinaryReader 确实以长度为前缀的 7 位编码整数读取字符串,这是否意味着额外的空间用于上述字符串标志(0 - ASCII,1 - 宽)?

这与从 2.0 及更高版本开始的单声道有关吗?我正在围绕一个字符串编写一个简单的自定义包装器以使其可变,尽管该字符串不会用于排序或比较(目前) - 我想知道是否应该分配新的字符串预先填充 ASCII 或 UNICODE (即如果我知道/假设内容) char 所以默认情况下会设置标志。

标签: c#stringunsafe

解决方案


推荐阅读