如果一个类的新实例不包含任何对象,它是否会创建一个堆条目(其中没有任何内容)或只是一个没有引用/指向堆上位置的堆栈条目?空类的新实例是否使用任何堆内存?例如:
class MyClass
{
}
class Program
{
Static void Main(string [] args)
{
MyClass mc = new MyClass();
}
}
答案 0 :(得分:0)
是的,这会在堆上创建一个对象。堆栈上会有一个引用(除非它被优化掉,因为没有使用引用)。
即使该类具有零非静态字段,对象实例也将包含一些标头/元数据。
另外,简单的表达式语句
{
new object();
}
在堆上创建一个对象,即使您不使用它的引用。
答案 1 :(得分:0)
无法在堆栈上分配对象,因为对象的生命周期可能会持续超出实例化它的函数的末尾。将在堆上创建对象实例。