2017-04-12 5 views
1

私は以下のような名前のプロパティクラスを"従業員"と言います。以下のようにスナップのように我々は、すべての「int型」データ型は、スタックとオブジェクトタイプに店になることを知っている以下のシナリオでどのようにメモリ割り当てが行われましたか?私はそれを混乱させました

public class Employee 
{ 
    public int EmpID { get; set; } 
    public int DeptId { get; set; } 
} 

は、ヒープ内の店舗となります。

enter image description here

ここに私の質問は、私は、メモリの割り当てが行われている方法

Employee objEmployee = new Employee(); 

よう従業員クラスのオブジェクトを作成しようと思ったとき、ありますか?

いずれの文献または関連リンクも認められるであろう。

+0

なぜ私はダウン投票を知りませんか? –

答えて

13

値と基準タイプの違いを見るためにあなたのthis article by Joseph Albahariを示唆していません下記のようにヒープに保管してください。

ことが完全に偽あるので、我々はすべてはそのを知りません。

はそれについて考える:

int[] M() { return new int[] { 1 }; } 

は、スタック上の1ですか?そうであれば、Mが復帰した後、Mの発信者からどのようにアクセスできますか?

明らかにそれはできません。 1はintであってもヒープ上にあります。

あなたの問題は、変数ではなく値を考えていることです。変数は、整数または参照が格納されているかどうかにかかわらず、ストレージです。そのストレージはどこかにある必要があります。 このストレージは、存続期間の要件によって異なります。短期ストレージは、短期ストレージプール(スタックまたはレジスタ)から割り当てることができます。長期記憶域は長期記憶域プール(ヒープ)から割り当てられます。 何もないは、格納されている値が構造体か参照かどうかとは関係ありません。

例では、プロパティのバッキングストアは任意に長く存続するため、ヒープから割り当てられる必要があります。

あなたは、値の型の値がスタックに載っているという神話を信じることを単に止める必要があります。値はのストレージになり、のストレージは、寿命の要件を満たすために移動する必要があります

-1

Employeeは参照型です。それはヒープに置かれ、スタックにはreferenceしかありません。どんなにこのクラスの内側にあるものをフィールド

は、私たちすべてが「INT」データ型はなりスタックとオブジェクトタイプで店になることを知っている

関連する問題