加入收藏 | 设为首页365足球投注平台
 28365365
C#堆栈和堆栈差异
发布时间:2019-04-13 点击:
C#堆栈和堆栈差异
理解堆和堆栈以便理解。
.NET中的内存管理,垃圾收集,错误和异常,调试和日志记录非常有用。
垃圾收集机制使程序员摆脱了复杂的内存管理。大多数程序不需要C#程序员手动管理内存,但这并不需要程序员知道哪些对象被回收到asignados。在一些特殊情况下这并不意味着程序员仍然需要手动管理内存。
在32位处理器上,每个进程都有4 GB的虚拟内存。
NET在此内存块中打开3个存储单元4千兆字节,分别作为堆栈,堆和非托管执行堆栈。

堆从下到上分配,其使用的空间在可用空间之下。C#中的所有类型的引用对象都分配给托管堆。恢复机制basura.Gestión目标对象,连续分配给管理堆内存,并且内存的放电效率远低于堆栈。
皮拉
堆栈从上到下填充,即一系列指向低内存和内存分配方向的高内存地址。所有类型的证券和C#引用都分配给堆栈,堆栈首先根据salir的最后一个原则分配和释放内存对象。
内存分配和对象破坏:
当创建类的对象的实例时,按类别将不同的成员分配给不同的存储区域。指针值类型和引用类型在堆栈上分配,参考批次的实例对象,静态成员分配给全局数据区域,并分配给administrado.Los。
堆栈指针现在指向堆上的对象。
当对象被弹出时,引用和实际对象之间的连接被中断,这允许对象处于休眠状态。
因为它本身就是堆栈,它可以使用特定的算法执行其内存管理和垃圾回收(GC)回收到堆上的休眠,以释放操作系统占用的内存对象你。
C#中的深层和浅层副本
深层复制:也称为深度克隆,不仅是一个全新一代的对象,而且还是副本,不是任何类型的成员,不是静态值,而是复制引用类型的所有成员真实的对象。
(即堆栈和堆成员被复制)
浅拷贝:也称为影子克隆,拷贝不是所有种类的成员,引用对象的引用值的所有成员和静态值,即原始对象和新对象的所有共享实例成员是引用类型对象。
(换句话说,只复制堆栈中的成员)
注意:不复制成员区域中的聚合数据,深层复制或浅层复制,成员区域中的聚合数据属于特定类,静态成员不属于对象实例,因为有一个类,所以无法复制。
您可以在实现ICloneable接口的C#中实现深层复制,但如果您需要ICloneable接口,则应该避免继承IClonable接口类型。
这样做会强制所有子类实现ICloneable接口,否则子类的新成员不会被类型的详细副本覆盖。