C# 什么是;新";关键字在.net中实际做什么?

C# 什么是;新";关键字在.net中实际做什么?,c#,.net,memory,allocation,C#,.net,Memory,Allocation,我知道new关键字正在调用类构造函数,但我们在哪个阶段为类分配内存 据我所知,它应该对应于GCHandle.Alloc(Object)方法,但我找不到连接。新操作符是在CLR中实现的。它从垃圾收集堆中分配内存并执行类构造函数 GCHandle.Alloc()不同。它利用GC中的一个单独的机制来创建对对象的引用,这些引用存储在单独的表中,并且除了在垃圾收集过程中通常会找到的对象引用之外,还会被扫描。必须向Alloc()传递一个现有对象引用,它会添加另一个对象引用。用于创建弱引用和固定引用,以及允许

我知道
new
关键字正在调用类构造函数,但我们在哪个阶段为类分配内存

据我所知,它应该对应于
GCHandle.Alloc(Object)
方法,但我找不到连接。

新操作符是在CLR中实现的。它从垃圾收集堆中分配内存并执行类构造函数


GCHandle.Alloc()不同。它利用GC中的一个单独的机制来创建对对象的引用,这些引用存储在单独的表中,并且除了在垃圾收集过程中通常会找到的对象引用之外,还会被扫描。必须向Alloc()传递一个现有对象引用,它会添加另一个对象引用。用于创建弱引用和固定引用,以及允许非托管代码存储对托管对象的引用并使其保持活动状态的机制。C++/CLI中的操作系统利用了它。

对象创建的所有内容都隐藏在
newobj
opcode(或
initobj
值类型)后面。因此,完全是一个实现细节内存是如何分配的,在哪里分配的,以及如何与其他内存管理结构联系起来的。

“但是我们在哪个阶段为类分配内存?”-您没有;运行时会这样做。你想做什么?为什么你想知道?实际上这只是一个理论问题。我只是想了解.net是如何使用内存的。正如前面所解释的,所有内存管理都是由CLR完成的。如果您想了解.NET如何处理内存(de)分配的基本知识,请查看这些页面。如果您想了解内存管理的一般工作原理,可以从开始。我建议您使用《CLR via C#》这本书来学习强大的.net基础知识。所有这些概念都解释得很好。