2009-07-28 7 views
1

.netとC#に関するスタックにクラスのオブジェクトを作成できますか?たとえば、 は:スタック内のオブジェクトの作成

class abc { int i=1; } 
abc a1=new abc(); 

さて、ここでのオブジェクトはヒープ内に作成されます。だから、オブジェクトのサイズが大きくない場合、ラムのスタックメモリにオブジェクトを作成する方法はありますか?

+0

自分のスタックを意味しますか?またはオブジェクトのスタックで? –

+0

あなたの質問は不明です(私はあなたが探しているものを伝えることはできません)。あなたが探しているものを明確にすることができない限り、質問は終了する可能性があります。 –

+0

クラスabc { int i = 1; } abc a1 = new abc(); ここで、オブジェクトはヒープで作成されます。 オブジェクトのサイズが大きくないので、ラムのスタックメモリにオブジェクトを作成する方法はありますか? – Amit

答えて

7

.NET参照型は常にGCヒープ上にあります。他の場所に置くことはできません。スタック変数のように見えます

System::Random rnd; 
rnd.Next(); 

のようなものをサポートしていたとしてもC++/CLIは、実際にはGCヒープ上で、Randomクラスを作成します(そして、それはIDisposableを実装している場合、ブロックの終わりにそのDisposeメソッドを呼び出します。)

これは、Eric Lippert氏によると、the stack is an implementation detailと書かれています。作成するタイプの参照または値のセマンティクスについては、主に気にする必要があります。

0

Mehrdadによると、参照型のインスタンス(オブジェクト)は、静的変数のようなものとともにヒープに格納されます。ローカル変数などはスタックに格納されます。

0

ヒープの代わりにスタックにオブジェクトが必要な理由がわかりません。その主な理由(少なくとも私が知っている主な理由)はRAIIです。 C++のコンパイラは、スタック上に作成された各オブジェクトがスコープを離れるときに破棄されることを保証します。 C#ので

あなたが使用して、文で同じことをアーカイブ:http://msdn.microsoft.com/en-us/library/yh598w02.aspx

1

あなたがstruct代わりのclassを使用する場合は、スタック上に作成される値型を作成します。これについてはlots of things to considerです。本フレームワーク設計ガイドラインは具体的な提案はしていませんが、違いをベンチマークし、価値のタイプを実装する価値があるかどうかを判断するのが最善の方法であることを示しています。

関連する問題