1. 首页
  2. 编程语言
  3. C#
  4. C#之CLR内存字符串常量池(string)

C#之CLR内存字符串常量池(string)

上传者: 2021-08-16 16:35:07上传 PDF文件 67.01 KB 热度 5次

C#中的string是比特殊的类,说引用类型,但不存在堆里面,而且String str=new String这样的重装也说没有的。这证明了CLR说用一种特殊的方式构造了字符串。我们再举一个简单例子看看:对照这个例子我们来看看内存图是怎么走的:首先CLR内部机制会在运行这个方法之前就会有"prologue"代码去开辟内存空间,s和s1就说这个时候创建的。然后我们为s对象在赋值为HelloC#,由于同一个对象,栈中不做操作,去字符串常量池中找,没找到则创建,然后修改s所存储的地址,HelloJava同样的操作。再创建一个s1的string对象,把s1压入栈,为S1赋值HelloC#,这个时候会去字符常量池中找,找到了就存这个引用。

用户评论