Object内存核心结构及实现完全剖析(MethodTable、EEClass与MethodDescChunk)

无疑,一个ObjectCLR中的逻辑结构是相当复杂的。
前段时间,写了一篇CLR探索系列:System.Object内存布局模型及实现研究,侧重从System.Object这个基本类的基本内存布局,实现和结构来研究了下。这是远远不够的。今天就从如何存储一个Object中的FieldMethod等信息,这些信息的逻辑组织方式和存储的逻辑结构。

废话不多说,看看就知道了:

 

首先,给一个图:


      
  
    这个图,显示了一个
ObjectMethodTableEEClassMethodDescChunk之间的大致关系。至于一个整体的Object的实现的逻辑结构模型图,结构比较复杂,不好画,google了半天也没找到个现成的,就用这个凑合了。

通常,在内存中,对一个instanceref的这个地址,其实是指向这个instanceMethodTable的。这个内容,我在“System.Object这个基本类的基本内存布局,实现和结构”这篇文章里面也有说,具体是如何实现的可以参照那篇文章。

老规矩,截取点MethdTable里面重要的属性,方法和结构体,总共一个MethodTable的实现,就大概2500多行,(太长了?这仅仅是定义部分),只能截取表示如下了:

 

class MethodTable

{    

    // Low WORD is component size for array and string types, zero otherwise

    DWORD           m_wFlags;

 

    // Base size of instance of this class when allocated on the heap

    DWORD           m_BaseSize;

    //Nmuber of Method
   
WORD            m_wNumMethods; 
   
//Number of Vitural Methods

    WORD            m_wNumVirtuals;
   
WORD            m_wNumInterfaces;

       
   
// LoaderModule. It is equal to the ZapModule in ngened images

    PTR_Module      m_pLoaderModule;   

    PTR_MethodTable m_pParentMethodTable;

 

    // This is the way to create a new method table. Don't try cal

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值