关于字符串驻留的问题

2019-02-27 18:15发布

关于字符串驻留的问题

下面是CLR via C#书上的原话(上传不了图片 )

CLR初始化时会创建一个内部哈希表,在这个表中,键(key)是字符串,值(value)是对托管堆中的String对象的引用。来实现字符串的驻留机制!

我的问题是CLR如何判断字符串在hash表中(或是如何通过这个机制提高性能的)
1.如果判断时根据字符串且已分配内存,为何还需要在hash表内存入相同引用并返回。这似乎起不到节约内存的作用
2.如果判断时未分配内存,又是如何判断字符串并返回hash内部的引用的

2条回答
冷血范
2楼-- · 2019-02-27 18:38

第一个问题好回答,因为字符串在.net体系里是个对象,有很多方法,属性的。如果仅仅记录一个“字符串”,就没法调用String对象的很多方法了。

第二个问题没太看明白。你的意思是怎么检索哪些key已经存在于hashtable中了吗?这个我就不知道了,没有研究过过hash表的实现代码。有空看下

查看更多
做自己的国王
3楼-- · 2019-02-27 18:40

第一个问题,在hash表中存入相同引用的作用 : 就是为了给创建相同String字符串的不同对象返回同一个引用,这是字符串驻留的机制,所以这是必要的。
第二个问题,hashtale 中key是一个值, 在哈希表中是通过一个特定的算法,将每个key通过一个函数计算后得到一个不同的值,CLR 中的哈希表中的key为什么需要去分配内存呢?,只要通过key 计算得到其映射的value的地址就可以了。

查看更多
登录 后发表回答