[英]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.