クラスのメモリ管理[閉じた
-
27-09-2019 - |
質問
次のコードでは、どのように - メモリ管理の観点から - 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
.
解決
説明する行には、単一のインスタンスが割り当てられます A
あなたがの新しいインスタンスを作成するとき、山の上 B
. 。そう、
B b = new B();
2つのオブジェクトが割り当てられます:1つ B
直接電話と1つ A
構築の一環として B
.
ライン自体がそうです なし のインスタンスを作成するまで B
.
A
参照フィールドではない3つのフィールドがあるようであるため、ヒープ上に新しいオブジェクトを作成するのではなく、の一部です A
実例。
これは、この例で割り当てられているほぼすべてのメモリです。
編集:
より明確な目的のために - スタックとヒープを説明する記事への参照リンク、およびメモリの割り当ての考慮事項:http://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/
他のヒント
Bのインスタンスを作成すると、1つの参照タイプ( "a")の1つのオブジェクトにメモリが割り当てられます。その直後にAの新しいインスタンスが作成され、2つの「int」フィールド( "x"、 "y")と1つのフィールドを持つオブジェクトのメモリの割り当てを引き起こします。 タイプは不明です タイプ。
所属していません StackOverflow