你知道.NET的字符串在内存中是如何存储的吗?

💡 原文中文,约2500字,阅读约需6分钟。
📝

内容提要

字符串是内存中最常用的类型之一,采用引用类型的内存布局。字符串对象由ObjHeader、TypeHandle和Payload组成,Payload包含长度和编码的文本,采用UTF-16编码。可以通过构建字节数组来创建字符串对象,通过CreateString方法转换。字符串不可变,但可以通过操作字节数组改变内容。

🎯

关键要点

  • 字符串是内存中最常用的类型之一,属于引用类型,采用引用类型的内存布局。
  • 字符串对象的内存布局分为三部分:ObjHeader、TypeHandle和Payload,Payload包含字符串长度和编码的文本。
  • 字符串采用UTF-16编码,大部分字符用两个字节表示,少数字符用四个字节表示,字节序为小端字节序。
  • 可以通过构建字节数组来创建字符串对象,使用CreateString方法将字节数组转换为String对象。
  • CreateString方法计算字节数组的长度,并填充TypeHandle、字符串长度和编码后的字节。
  • AsString方法用于将字节数组转换为字符串实例,返回同一字节数组的字符串实例是同一个对象。
  • 字符串一经创建不可改变,但可以通过操作字节数组改变内容。
➡️

继续阅读