1

在下面的代码中,如何 - 在内存管理方面 -class A在 .NET (C#) 中分配和释放。

class A
{
    public static m1(int x, int y)
    {
        int x, y;
        return x+y;
    }
    int m2(int p, int q)
    { 
        int p, int q;
        return p+q;
    }
    int x=10; 
    int y;
    const int x=10;
    readOnly y=20;

    public int x
    {
        get {y}
        set {y=value}
    }
}

class B
{
    A a=new A();  // what happens when initializing class A;
}

注意: 的使用class B可以是程序的入口点,也可以是对象实例,但这里的范围是内存管理和实例的分配class A

4

2 回答 2

1

A当您创建B. 所以,

B b = new B();

将分配两个对象:一个B直接调用,一个A作为构造的一部分B

在您创建B.

A似乎有三个不是引用字段的字段,因此它不会在堆上创建新对象,而是A实例的一部分。

这大致就是本示例中分配的所有内存。

编辑:

为了更清楚起见-解释堆栈和堆以及内存分配注意事项的文章的参考链接: http ://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/

于 2010-10-31T08:35:05.763 回答
1

当您创建 B 的实例时,将为具有一个引用类型(“A”)字段的 1 个对象分配内存。在创建 A 的新实例之后,它会为具有两个“int”字段(“x”、“y”)和一个TYPE IS UNKNOWN类型字段的对象分配内存。

于 2010-10-31T08:37:07.270 回答