首页 / 知识
.net托管内存如何处理对象内部的值类型?
2023-04-13 01:04:00

How does .net managed memory handle value types inside objects?
据我了解,以下是正确的: 这是我的问题: 从逻辑上讲,我认为类内的值类型应该在堆中,但是我不确定是否必须将它们装箱才能到达那里。 编辑: 建议阅读该主题: 类的值类型值必须与对象实例一起存在于托管堆中。方法的线程堆栈仅在方法持续时间内有效。如果值仅存在于该堆栈中,该值如何持久? 托管堆中类的对象大小是其值类型字段,引用类型指针和其他CLR开销变量(例如,同步块索引)的总和。当将一个值分配给对象的value-type字段时,CLR将该值复制到该对象内为该特定字段分配的空间。 例如,一个具有单个字段的简单类。
并带有一个简单的测试类。
如果您使用.NET Framework SDK提供的MSIL反汇编程序来查看EmbeddedTest.TestEmbeddedValues()的IL代码,
请注意,CLR被告知将堆栈中的装入值" 20" stfld装入装入的EmbeddValues的NumberField字段位置,直接放入托管堆中。同样,在检索值时,它使用ldfld指令将值直接从该托管堆位置复制到线程堆栈中。这些类型的操作不会进行装箱/拆箱。
我所见过的最好的资源是杰弗里·里希特(Jeffrey Richter)通过C#编写的CLR书。如果您进行任何.NET开发,都非常值得一读。基于该文本,我的理解是引用类型内的值类型确实存在于父对象中嵌入的堆中。引用类型总是在堆上。
在堆上。它们是对象覆盖区分配的一部分,就像保存引用的指针一样。
这里没有拳击。
对Richter的书+1票。 结构类型的变量或其他存储位置是该类型的公共和私有实例字段的集合。 给定
声明 将结构类型的存储位置识别为字段的聚集是了解结构的第一步。 试图将它们视为持有某种对象可能看起来"简单",但与它们的实际工作方式不匹配。 |
最新内容
相关内容
python如何控制内存
python如何控制内存,名称,情况,系统,定期,管理,数字,数据,培训,对象,内存,python控制内存的方法:一、对象的引用计数机制二、垃圾回收机制三、Python如何创建对象,有哪些方法
Python如何创建对象,有哪些方法,培训,对象,方法,内容,函数,属性,所在,以上,以下,功能,以下介绍Python创建对象的9种方法。classPoint:def__inipython类对象和实例对象是一样的吗
python类对象和实例对象是一样的吗,地址,概念,下来,数据,培训,实例,对象,方法,属性,变量,python面向对象最重要的概念就是类(Class)和实例(Inpython对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的python如何清理内存
python如何清理内存,培训,策略,情况,对象,垃圾,变量,内存,结束,赋值,局部,引用计数,这是Python的垃圾回收策略。补充一下。解释器(也就是你说python如何实例化一个对象
python如何实例化一个对象,培训,名称,实例,括号,关键字,对象,函数,字母,方式,以上,python中同样使用关键字class创建一个类,类名称第一个字母python类和对象的区别是什么
python类和对象的区别是什么,培训,主体,汽车,状态,对象,定义,属性,方法,实例,区别,类和对象1、类和对象得区别:类是对客观世界中事物得抽象,而python如何处理缩进
python如何处理缩进,代码,培训,空格,语句,语言,卡尺,开发者,程序员,语法,测量,对于Python的这种“缩进”风格,喜欢它的人说这是一种乐趣;不喜python如何判断对象的某个属性
python如何判断对象的某个属性,培训,异常,名称,方法,对象,属性,特性,参数,逻辑,以上,在python判断某个对象是否具有某属性可以使用以下方法方python如何处理excel
python如何处理excel,数据,数字,培训,代码,标的,观察,名字,名称,工作,顺序,Excel是我们日常工作中经常用到的办公软件,在处理数据和表格方面有pythondjango安装失败如何处理
pythondjango安装失败如何处理,培训,发行,报告,代码,数据库,新和,可能会,提示符,管理工具,框架,作为一个PythonWeb框架,Django需要Python。Pytpython如何处理异常
python如何处理异常,异常,代码,培训,情况,位置,错误,发生,文件,程序,语句,python中的异常(Exception)处理异常当你的程序出现例外情况时就会