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 类型指针指向堆上的类型(在前言中加载).同步根是锁定和同步的记录.实例数据存储成员的实例数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |