一个类的内存管理

时间:2010-10-31 08:26:34

标签: c# .net memory-management heap-memory stack-memory

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

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实例的分配。 / p>

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:1)

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