C# C:String.Length是每次都遍历缓冲区还是只是返回一个存储值?

C# C:String.Length是每次都遍历缓冲区还是只是返回一个存储值?,c#,string,C#,String,没什么可补充的了。只是想知道是否有人知道C中String类的内部结构在做什么,正如文章中所解释的: 本质上,字符串是内存中的字符数组,加上数组的长度和字符串的长度(以字符为单位)。数组的长度并不总是与字符长度相同,因为可以在mscorlib.dll中过度分配字符串,以便更轻松地构建它们 因此,长度实际上存储为两个长度,字节和字符,而不是每次计算。在CLR中,字符串的长度(字符和字节)存储在内存中,以便CLR知道包含字符串的字符的内存块数组有多大。这是在创建字符串时完成的,不会更改,因为Syste

没什么可补充的了。只是想知道是否有人知道C中String类的内部结构在做什么,正如文章中所解释的:

本质上,字符串是内存中的字符数组,加上数组的长度和字符串的长度(以字符为单位)。数组的长度并不总是与字符长度相同,因为可以在mscorlib.dll中过度分配字符串,以便更轻松地构建它们


因此,长度实际上存储为两个长度,字节和字符,而不是每次计算。

在CLR中,字符串的长度(字符和字节)存储在内存中,以便CLR知道包含字符串的字符的内存块数组有多大。这是在创建字符串时完成的,不会更改,因为System.string类型是不可变的


这可能会有所帮助:

长度存储在内存中。我很确定Skeet自己在类和属性文档中描述了这一点。@HansPassant它是SecureString引用。在休闲中,字符串长度是外部的。