加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 参考值的’Type’存储在内存中?

发布时间:2020-12-16 01:43:53 所属栏目:百科 来源:网络整理
导读:由于参考值作为数据存储在堆中;哪里存储了任何参考值的类型信息? 如果有几个类艺术家的实例;当它们存储在堆中时,.Net如何将这些内存块标记为Artist的类型? 谢谢! 解决方法 void M(){ Artist a = new Artist();} 调用该方法时,会扩展一个新的堆栈帧,CLR在
由于参考值作为数据存储在堆中;哪里存储了任何参考值的类型信息?

如果有几个类艺术家的实例;当它们存储在堆中时,.Net如何将这些内存块标记为Artist的类型?

谢谢!

解决方法

void M()
{
   Artist a = new Artist();
}

调用该方法时,会扩展一个新的堆栈帧,CLR在执行该方法的第一个语句之前会有一些准备代码,就像一个现象.在此期间,CLR加载方法中使用的所有类型.在此示例中,Artist的类型将加载到堆.但是类型也可能已经存在,因为在调用M()之前使用了类型.然后我们来到第一个表达式,一个新的语句,它调用类的构造函数.如果你看一下它生成的CIL,你会看到像newobj blabla这样的东西.这里堆上的内存块被分配用于存储实例.块的大小取决于类的详细信息,因为块需要保存实例的所有数据.通常该块由以下组成:

Type pointer + Sync root + Instance data

类型指针指向堆上的类型(在前言中加载).同步根是锁定和同步的记录.实例数据存储成员的实例数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读