CLR里面内存模型众多,这里个人认为有个极其重要的内存模型组成的链式结构。本篇来看下。
1.成员 这个内存模型的链式成员结构有如下: 一:MethodTable 二:EEClass 三:PreCode 四:MethodDescChunk 五:MethodDesc
2.内存模型示意图 以上五个结构,组成的内存模型示意图大致如下所示,它基本上包含了CLR里面用到的必须场景。当然,还有一些稀奇古怪的功能,这里并没有过多展示。
3.解释 一:MethodTable:对象的在CLR里面的实际类型表示,有的书上按照它的名字叫做方法表,但是实际上体现不出来它的功能。 二:EEClass:类型或者对象的私有数据 三:PreCode:前置码,一般的存放的是表示方法被编译之前的跳转或者需要经过的地址 四:MethodDescChunk:它存放在MethodDesc之前,表示它之后有几个MethodDesc。 五:MethodDesc:这个极其重要,表示的是函数方法的结构体。函数是否被编译,在内存里面的存放位置,以及函数对于GC的影响。JIT编译的时候需要编译的哪个函数,都是MethodDesc来做。
4:其它 除了以上之外,还有一些其它的内存表示。后面可能会赘述。
作者:江湖评谈