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

c# – 参考值的’Type’存储在内存中?,第1张

概述由于参考值作为数据存储在堆中;哪里存储了任何参考值的类型信息? 如果有几个类艺术家的实例;当它们存储在堆中时,.Net如何将这些内存块标记为Artist的类型? 谢谢! void M(){ Artist a = new Artist();} 调用该方法时,会扩展一个新的堆栈帧,CLR在执行该方法的第一个语句之前会有一些准备代码,就像一个现象.在此期间,CLR加载方法中使用的所有类型.在此 @H_502_1@ 由于参考值作为数据存储在堆中;哪里存储了任何参考值的类型信息?

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

谢谢!

解决方法
voID M(){   Artist a = new Artist();}

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

Type pointer + Sync root + Instance data

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

总结

以上是内存溢出为你收集整理的c# – 参考值的’Type’存储在内存中?全部内容,希望文章能够帮你解决c# – 参考值的’Type’存储在内存中?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1216876.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存