簡體   English   中英

這個C#.NET代碼的內存分配是什么

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM