它的种类对象指针指向笔者

新近在看书,看到了指标在内存中的存款和储蓄方式。

讲到了对象存款和储蓄在内存堆中,分配的长空除了品种对象的成员所需的内部存款和储蓄器量,还也许有额外的分子(类型对象指针、 同步块索引 ),看到那些我就有一点不懂了,不明白类型对象指针是何等,指向的怎么着?

从英特网找也不曾找到,最后往下看,书中稍加描述。说下本身的明亮:

品种对象指针:指向类型对象存款和储蓄的地点,倘诺有叁个门类Person,它在堆中有一块区域存款和储蓄它里面包车型地铁字段和分子以及五个附加成员(类型对象指针、 同步块索引 ),类型对象的体系对象指针指向的是System.Type的地方。

因为Person类型在内部存款和储蓄器中相对于System.Type也是用作二个对象存在的,System.Type类型也是一个项目对象,它的品种对象指针指向自个儿;

实例化一个Person对象,Person p = new
Person(); p对象在内部存款和储蓄器堆中也分配一块区域存款和储蓄它此中的字段和成员以及三个附加成员(类型对象指针、 同步块索引 ),p的品种对象指针指向Person类型在堆中的地址。

 

同步块索引:先说一入手拉手块,.NET共青团和少先队在规划中央框架时足够考虑了线程同步的标题,其结果便是.NET为每二个堆内对象都提供了援助线程同步的法力,那就是一齐机制的雏形【参考:http://genwoxuedotnet.blog.51cto.com/1852748/504107

但是对各类堆内对象都分配同步块有三个异常的大的害处,便是这么增大了内部存款和储蓄器的损耗。在一般的系统中,供给联合机制援助的对象只怕只占少数,这样对于很多对象的话,三个一块块的内部存款和储蓄器消耗就全盘被萧疏了。鉴于那一点,.NET框架接纳了一种折中的办法,正是事实上只为各种堆内对象分配贰个手拉手索引,该索引中只保留叁个申明数组内索引的板寸。.NET在加载时会新建三个同台块数组,当有个别对象要求被一块时,.NET会为其分配贰个体协会助举行块,并且把该联合块在联合块数组中的索引到场该对象的联合块索引中。

同步块机制满含如下的几点:
·
在.NET被加载时伊始化同步块数组。
·
每贰个被分配在堆上的指标都会含有三个附加的字段,当中贰个仓储类型指针,而别的多少个即使一同块索引,伊始时被赋值为-1。
·
当三个线程试图利用该对象步入同步时,会检查该指标的一同索引。假设索引为负数,则会在共同块数组中搜索抑或新建一个联合块,而且把一同块的索引值写入该对象的同步索引中。若是该对象的同步索引不为负值,则找到该目的的联合块何况检查是还是不是有别的线程在使用该联合块,借使有则跻身等待状态,若无则表达使用该同步块。

同步块是指.NET维护的协同块数组中的有个别成分

 

相关文章