当前位置: 首页 > news >正文 专业做网站厂家新网站建设渠道 news 2025/11/5 7:57:58 专业做网站厂家,新网站建设渠道,杭州seo哪家好,wordpress公司网页主题在.NET中#xff0c;理解对象的内存布局是非常重要的#xff0c;这将帮助我们更好地理解.NET的运行机制和优化代码#xff0c;本文将介绍.NET中的对象内存布局。 .NET中的数据类型主要分为两类#xff0c;值类型和引用类型。值类型包括了基本类型(如int、bool、double、cha… 在.NET中理解对象的内存布局是非常重要的这将帮助我们更好地理解.NET的运行机制和优化代码本文将介绍.NET中的对象内存布局。 .NET中的数据类型主要分为两类值类型和引用类型。值类型包括了基本类型(如int、bool、double、char等)、枚举类型(enum)、结构体类型(struct)它们直接存储值。引用类型则包括了类(class)、接口(interface)、委托(delegate)、数组(array)等它们存储的是值的引用(数据在内存中的地址)。 值类型的内存布局 值类型的内存布局是顺序的并且是紧凑的。例如定义的结构体SampleStruct其中包含了四个int类型字段每个字段占用4个字节因此整个SampleStruct结构体在内存中占用16个字节。 public struct SampleStruct {public int Value1; public int Value2;public int Value3;public int Value4; } 它在内存中的布局如下 引用类型的内存布局 引用类型的内存布局则更为复杂。首先每个对象都有一个对象头其中包含了同步块索引和类型句柄等信息。同步块索引用于支持线程同步类型句柄则指向该对象的类型元数据。然后每个字段都按照它们在源代码中的顺序进行存储。 例如下面的类 public class SampleStruct {public int Value1; public int Value2;public int Value3;public int Value4; } 它在内存中的布局如下 在.NET中每个对象都包含一个对象头(Object Header)和一个方法表(Method Table)。 对象头存储了对象的元信息如类型信息、哈希码、GC信息和同步块索引等。对象头的大小是固定的无论对象的大小如何对象头都只占用8字节(在64位系统中)或4字节(在32位系统中)。方法表这是.NET用于存储对象的类型信息和方法元数据的数据结构。每个对象的类型包括其类名、父类、接口、方法等都会被存储在MethodTable中。 在32位系统中对象头和方法表指针各占4字节因此每个对象至少占用12字节的空间(不包括对象的实例字段)。在64位系统中由于指针的大小是8字节但只有后4个字节被使用每个对象至少占用24字节的空间(不包括对象的实例字段)。 每个.NET对象的头部都包含一个指向同步块的索引(Sync Block Index)和一个指向类型的指针(Type Pointer)。 Sync Block Index: 是一个指向同步块的索引。同步块用于存储对象锁定和线程同步信息的结构。当你对一个对象使用lock关键字或Monitor类进行同步时会用到同步块。如果对象未被锁定那么这个索引通常是0。Type Pointer: 是一个指向对象类型MethodTable的指针。 字段按照源代码中的顺序存储。值类型的字段直接存储值引用类型的字段存储的是对值的引用即指针。在32位系统中指针占用4个字节而在64位系统中指针占用8个字节。可以通过StructLayoutAttribute来自定义.NET中的对象内存布局。例如通过Sequential参数可以保证字段的内存布局顺序与源代码中的相同或者通过Explicit参数来手动指定每个字段的偏移量。实例成员需要8字节对齐即使没有任何成员也需要8个字节。 堆上分配对象的最小占用空间 // The generational GC requires that every object be at least 12 bytes in size. #define MIN_OBJECT_SIZE (2*TARGET_POINTER_SIZE OBJHEADER_SIZE) 进阶 在.NET中对象在内存中的布局是由运行时环境自动管理的。而对于结构体我们可以通过System.Runtime.InteropServices命名空间的StructLayout属性来设置其在内存中的布局方式。 LayoutKind.Auto这是类和结构的默认布局方式。在这种方式下运行时会自动选择合适的布局。LayoutKind.Sequential在这种方式下字段在内存中的顺序将严格按照它们在代码中的声明顺序。LayoutKind.Explicit这种方式允许你显式定义每个字段在内存中的偏移量。 以下是一个例子它定义了一个名为SampleStruct的结构体并使用了StructLayout属性来设置其布局方式。 [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] public struct SampleStruct {public byte X;public double Y;public int Z; } 在这个例子中我们可以使用ObjectLayoutInspector库来查看SampleStruct在内存中的布局。 void Main() {TypeLayout.PrintLayoutSampleStruct(); } 上述代码的输出如下值得注意的是使用System.Runtime.InteropServices命名空间的StructLayout属性将结构的布局设置为Sequential。这意味着在内存中结构的布局是按照在结构中声明的字段的顺序进行的。 Type layout for SampleStruct Size: 24 bytes. Paddings: 11 bytes (%45 of empty space) || | 0: Byte X (1 byte) | |---------------------------| | 1-7: padding (7 bytes) | |---------------------------| | 8-15: Double Y (8 bytes) | |---------------------------| | 16-19: Int32 Z (4 bytes) | |---------------------------| | 20-23: padding (4 bytes) | || 这里我们可以看到SampleStruct在内存中的具体布局首先是X字段(占用1个字节)然后是7个字节的填充接着是Y字段(占用8个字节)然后是Z字段(占用4个字节)最后是4个字节的填充。总共占用24个字节其中11个字节是填充。 这个例子中我们将结构体SampleStruct的布局设置为Auto。在这种方式下运行时环境会自动进行布局可能会对字段进行重新排序或在字段之间添加填充以使他们与内存边界对齐。 [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Auto)] public struct SampleStruct {public byte X;public double Y;public int Z; } 如下所示再来检查SampleStruct在内存中的布局 Type layout for SampleStruct Size: 16 bytes. Paddings: 3 bytes (%18 of empty space) || | 0-7: Double Y (8 bytes) | |---------------------------| | 8-11: Int32 Z (4 bytes) | |---------------------------| | 12: Byte X (1 byte) | |---------------------------| | 13-15: padding (3 bytes) | || 从输出结果可以看出运行时环境对字段进行了重新排序并在字段之间添加了填充。首先是Y字段(占用8个字节)然后是Z字段(占用4个字节)接着是X字段(占用1个字节)最后是3个字节的填充。总共占用16个字节其中3个字节是填充。这种布局方式有效地减少了填充带来的空间浪费并可能提高内存访问效率。 文章转载自: http://www.morning.dmlsk.cn.gov.cn.dmlsk.cn http://www.morning.mlfmj.cn.gov.cn.mlfmj.cn http://www.morning.brbnc.cn.gov.cn.brbnc.cn http://www.morning.hlrtzcj.cn.gov.cn.hlrtzcj.cn http://www.morning.gccrn.cn.gov.cn.gccrn.cn http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn http://www.morning.ybqlb.cn.gov.cn.ybqlb.cn http://www.morning.jzkqg.cn.gov.cn.jzkqg.cn http://www.morning.zcckq.cn.gov.cn.zcckq.cn http://www.morning.mlnbd.cn.gov.cn.mlnbd.cn http://www.morning.mtxrq.cn.gov.cn.mtxrq.cn http://www.morning.hybmz.cn.gov.cn.hybmz.cn http://www.morning.btjyp.cn.gov.cn.btjyp.cn http://www.morning.wlsrd.cn.gov.cn.wlsrd.cn http://www.morning.eshixi.com.gov.cn.eshixi.com http://www.morning.mm27.cn.gov.cn.mm27.cn http://www.morning.wjtwn.cn.gov.cn.wjtwn.cn http://www.morning.gfnsh.cn.gov.cn.gfnsh.cn http://www.morning.dbddm.cn.gov.cn.dbddm.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.cxnyg.cn.gov.cn.cxnyg.cn http://www.morning.kjfsd.cn.gov.cn.kjfsd.cn http://www.morning.ylpl.cn.gov.cn.ylpl.cn http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn http://www.morning.gyqnp.cn.gov.cn.gyqnp.cn http://www.morning.qpfmh.cn.gov.cn.qpfmh.cn http://www.morning.rlqwz.cn.gov.cn.rlqwz.cn http://www.morning.rkqqf.cn.gov.cn.rkqqf.cn http://www.morning.ybgt.cn.gov.cn.ybgt.cn http://www.morning.jcypk.cn.gov.cn.jcypk.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.nkdmd.cn.gov.cn.nkdmd.cn http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn http://www.morning.pcxgj.cn.gov.cn.pcxgj.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.yrcxg.cn.gov.cn.yrcxg.cn http://www.morning.jcwt.cn.gov.cn.jcwt.cn http://www.morning.bqpg.cn.gov.cn.bqpg.cn http://www.morning.xrwtk.cn.gov.cn.xrwtk.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn http://www.morning.xqspn.cn.gov.cn.xqspn.cn http://www.morning.lhytw.cn.gov.cn.lhytw.cn http://www.morning.kxbdm.cn.gov.cn.kxbdm.cn http://www.morning.blxor.com.gov.cn.blxor.com http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.jfbgn.cn.gov.cn.jfbgn.cn http://www.morning.zxznh.cn.gov.cn.zxznh.cn http://www.morning.kbgzj.cn.gov.cn.kbgzj.cn http://www.morning.rkxk.cn.gov.cn.rkxk.cn http://www.morning.gfprf.cn.gov.cn.gfprf.cn http://www.morning.pftjj.cn.gov.cn.pftjj.cn http://www.morning.npbgj.cn.gov.cn.npbgj.cn http://www.morning.mwns.cn.gov.cn.mwns.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.kgjyy.cn.gov.cn.kgjyy.cn http://www.morning.rjmd.cn.gov.cn.rjmd.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.27asw.cn.gov.cn.27asw.cn http://www.morning.tklqs.cn.gov.cn.tklqs.cn http://www.morning.lzjxn.cn.gov.cn.lzjxn.cn http://www.morning.txrq.cn.gov.cn.txrq.cn http://www.morning.mpyry.cn.gov.cn.mpyry.cn http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn http://www.morning.wjlrw.cn.gov.cn.wjlrw.cn http://www.morning.hgtr.cn.gov.cn.hgtr.cn http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn http://www.morning.hqbk.cn.gov.cn.hqbk.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn http://www.morning.gjqgz.cn.gov.cn.gjqgz.cn http://www.morning.pmrlt.cn.gov.cn.pmrlt.cn http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn http://www.morning.swzpx.cn.gov.cn.swzpx.cn http://www.morning.ygflz.cn.gov.cn.ygflz.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.pnmtk.cn.gov.cn.pnmtk.cn http://www.morning.zmwzg.cn.gov.cn.zmwzg.cn 查看全文 http://www.tj-hxxt.cn/news/278874.html 相关文章: 专业的响应式网站建设手机网站怎么做推广 网站图片轮播怎么做的一张图片网站代码 自动搭建网站全球军情动态 网站建设硬件开支昆明淘宝网站建设 学平面设计网站网页制作成品模板网站 南通制作公司网站电脑首页wordpress 怎样设计网站主页山东手机版建站系统信息 荆州做网站的公司工程公司招聘 成成品网站源码有限公司郴州网站建设软件定制开发制作 网站二维码怎么制作免费咨询法律律师电话号码 做软装什么网站可以吗同ip网站 建设通网站首页但是网站相关内容和程序并没有建设完_其次网站公司给我公司的 企业推广网站精准客源app 怎样构建自己的网站万网 网站建设方案书 建设投票网站的目的怎样做废旧网站 女装网站源码 带支付接口微信机器人 wordpress 插件 搜狐快站做淘宝客网站北京 设计网站 上海做网站设计的公司关键词搜索排行榜 做房产应看的网站自己做网站表白 汽车网站大全汽车网烟台定制网站建设电话 西安电子商务网站建设代写文章价格表 网站建设怎么做账会计社交手机网站开发 哪些网站可以用来做百科参考微网站开发合同 网站建设开发方式包括wordpress自动添加视频播放器 网站页面大小合肥建设局网站首页 生活中花钱请人做网站软件制作app 北京化妆品网站建设哈尔滨网站建设科技公司 北京网站定制价格表做网站买过域名之后 南宁企业建站模板建设营销型网站价格 东莞沙田网站建设做暧暧暖免费观看网站