将相同的字符串变量引用都指向一个字符串对象.
3、CLR实现字符串留用的过程
CLR初始化时会创建一个内部哈希表.在这个表中,键(key)是字符串,而值(value)是对托管堆中的String对象的引用...4、CLR默认留用程序集元数据中的字面值字符串
程序集加载时,CLR默认留用程序集元数据中的描述的所有字面值字符串,大微软知道这个过程可能因为额外的哈希表查找而显著影响性能,所以现在可以禁用此功能.通过对程序集用...,并在托管模块中的元数据中嵌入.同一个字符串在源代码中多次出现,如果每次都去内存中重复开辟空间,不仅浪费内存,而且把它们嵌入元数据会使生成的文件无谓的增大....为了解决这个问题,许多编译器(包括C#编译器)只在模块的元数据中只将字面值字符串至写入一次,CLR默认留用程序集元数据中的字面值字符串。...引用改字符串的所有代码都被修改成引用元数据中的同一个字符串.编译器将单个字符串的多个实例合并成一个实例,能显著减少模块的大小.C/C++编译器多年来一直采用这个技术,这个技术被称为"字符串池".