[英]What will be the memory allocation of this C#.NET code
using System;
class ClassOfInts
{
public int x;
public int y;
}
class Test
{
ClassOfInts objClassOfInts;
string name;
public TestMethod(int p, int q, string s)
{
objClassOfInts=new ClassofInts;
objClassOfInts.x=p;
objClassOfInts.y=q;
name=s;
}
}
class Main
{
static Main()
{
Test t1=new Test();
Test t2=new Test();
t1.TestMethod(1,2,"First");
//XXX
t2.TestMethod(2,3,"Second");
//YYY
}
}
上述程序达到XXX时的内存分配是多少。 参考变量objClassInts是否仍会在Heap中对其对象进行处理。 或者一旦TestMethod完成执行,objClassInts将被提供为null。
每个Test
实例都有自己的objClassOfInts
实例。 该实例将与Test
实例一样长。
在您的示例中,这意味着它们将一直存在直到Main
的结尾。
顺便说一句,不使用匈牙利表示法是最佳做法。 在“`objClassOfInts'”中我们假设它是某种对象。 对象在C#中并不特殊 - 它们是预期的。
我不确定我是否遵循了这个问题,但除非你将一个对象设置为null,否则如果你仍然可以访问它,那么该对象仍将存在。 垃圾收集的好处是,对象在代码的某些部分不会出乎意料地消失,只有当你无法访问它们时它们才会被删除。
当执行达到XXXX时,t1引用的对象有资格进行垃圾回收。 其中包括其字段,objClassOfInts和name所持有的对象引用。 当它达到YYYY时,t1和t2引用的对象都是合格的。 在调试模式下,在方法退出之前,它们将不符合条件。 它没有说明它们何时被收集,可能需要一段时间。
objClassOfInts不会为null。 它从null开始,但只要Test对象是实时的,它所引用的所有对象也将是实时的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.