.net中的"new"关键字实际上做了什么?

Ser*_*nko 10 .net c# memory allocation

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

根据我的理解,它应该对应于GCHandle.Alloc(Object)方法,但我无法找到连接.

Han*_*ant 16

新的运营商在CLR实现.它从垃圾收集堆中分配内存并执行类构造函数.

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


Mar*_*ell 10

对象创建的所有内容都隐藏在newobj操作码后面(或者initobj用于值类型).因此,它完全是一个实现细节,分配内存的方式和位置,以及它与其他内存管理结构的关系.