10

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

据我了解,它应该与GCHandle.Alloc(Object)方法相对应,但我找不到连接。

4

2 回答 2

16

new运算符在CLR 中实现。它从垃圾收集堆中分配内存并执行类构造函数。

GCHandle.Alloc()一样。这利用了 GC 中的单独机制来创建对对象的引用,这些引用存储在单独的表中并被扫描,除了在垃圾回收期间通常发现的对象引用。您必须通过 Alloc() 一个现有的对象引用,它会添加另一个。用于创建弱引用和固定引用以及允许非托管代码存储对托管对象的引用并使其保持活动状态的机制。C++/CLI 中的gcroot<> 模板类利用了它。

于 2012-07-16T13:33:31.943 回答
10

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

于 2012-07-16T13:34:01.693 回答