在下面的代码中,在内存管理方面,如何在.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>
答案 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 字段的对象分配内存。