c# - 字符串长度的高位标志
问题描述
有一篇旧文章谈论 .NET/C# 中的一些字符串内部结构。有趣的花絮之一:
m_stringLength
这是字符串的逻辑长度,由 String.Length 返回。因为一些高位用于附加标志以增强性能,所以字符串的最大长度被限制为比 32 位系统的 UInt32.Max 小得多的限制。其中一些标志表明字符串包含简单字符,例如纯 ASCII,并且不需要调用复杂的 UNICODE 算法进行排序和比较测试。
我知道BinaryReader 确实以长度为前缀的 7 位编码整数读取字符串,这是否意味着额外的空间用于上述字符串标志(0 - ASCII,1 - 宽)?
这与从 2.0 及更高版本开始的单声道有关吗?我正在围绕一个字符串编写一个简单的自定义包装器以使其可变,尽管该字符串不会用于排序或比较(目前) - 我想知道是否应该分配新的字符串预先填充 ASCII 或 UNICODE (即如果我知道/假设内容) char 所以默认情况下会设置标志。
解决方案
推荐阅读
- json - 如何使用 JQ 按值从大 JSON 输出中过滤数据块?
- docker-compose - Composer 在 /app 中找不到 composer.json 文件
- java - 如何在处理中一次渲染列表中的多个对象?
- javascript - 如何在另一个部分 EJS 中包含部分?
- javascript - React 组件无法从 api 获取数据
- arrays - 给定三个相等长度的数组,我如何找到可能的组合数量,其中我以递增的方式从每个数组中选择一个整数
- python - Python pip 的 pip.conf 和 pypirc 文件有什么区别?
- javascript - 从 ^ 到 " 或 ^ 到逗号中删除部分 javascript 字符串
- c# - 为什么我的混音器有时在播放时按 A/D 会调节音量?
- javascript - 遍历文件夹及其所有子文件夹以打印文件名