创建对象时的C#内存分配

时间:2018-08-05 18:00:35

标签: c# .net

我的问题是,当我们为一个类变量创建两个对象时,内存中会发生什么。 例如:

class a = new class(); 
a = new class();

当时,两者都分配在同一内存中

2 个答案:

答案 0 :(得分:2)

在堆上分配了两个对象。第一个被第二个语句中的替换,并且当有足够的内存压力需要进行垃圾收集时,垃圾收集器将对其进行重新分配。

答案 1 :(得分:0)

class a = new class();

这将创建两件事:堆上类的实例,以及对该实例的引用a

a = new class();

这将在堆上创建该类的新实例,并将引用a更改为指向新实例。先前的实例将保留在内存中,但是在没有其他引用的情况下也无法访问(aka refcount为0),并且将在运行时由垃圾收集器清除。