大家都知道.Net框架中String对象是直接存放在堆内存中的
我只是想了解 .Net 框架中是否有任何为字符串保留的内存。在 Java 中,有一个为字符串保留的内存,称为 SCMP(字符串常量内存池),其中字符串被初始化和垃圾收集,就像堆内存中的其他对象一样。
.Net 框架在表中保存字符串存储,Intern Pool
. 你可能会看到:
字符串实习和 String.Empty - Eric Lippert
如果您在一个编译单元中有两个相同的字符串文字,那么我们生成的代码可确保 CLR 仅为程序集中该文字的所有实例创建一个字符串对象。这种优化称为“字符串实习”。
公共语言运行时通过维护一个称为实习池的表来保存字符串存储,该表包含对程序中以编程方式声明或创建的每个唯一文字字符串的单个引用。因此,具有特定值的文字字符串的实例在系统中只存在一次。
在 .NET 中,文字字符串是“内部”的,因此每个文字字符串只有一个副本。
请参阅http://msdn.microsoft.com/en-us/library/system.string.intern.aspx