私はDisposeパターンについて読んでいたのですが、どうすればmemory is allocatedが出てきました。以下はhttp://codebetter.com/karlseguin/2008/04/28/foundations-of-programming-pt-7-back-to-basics-memory/の引用です。ほとんどのデータがヒープになる場合、スタックメモリの重要性/役割は何ですか?
メモリ割り当て
....
....
この規則の唯一の例外は、タイプを参照するために属する値の種類があります - 例えばUserクラスのIdプロパティが進みますヒープと、Userクラス自体のインスタンス
これはまた、ここでスタックオーバーフローについて言及されています。 memory allocation for value type inside reference type in .net
私の理解は、宣言されている場所に関係なくすべての値の型がスタックになるということでした。今は間違っています。下のコードでは、i
がヒープになります。リンクに従ってスタックにはない。これは、MyClass
がヒープになり、その値のすべての型とともに参照型になるためです。
class MyClass()
{
int i = 5;
}
[OK]をクリックすると、クラスの一部ではない値の型だけがスタックメモリに移動します。右?しかし、C#のようなDot Net言語のほとんどすべてがクラスの中にあります。それでは、スタックメモリには何がありますか?
このanswerは、ヒープに行く値の種類を説明しています。
これが当てはまる場合、スタックメモリにはほとんど、あるいはまったく何もありません。
私は何かを誤解していると思う。
ほとんどすべてのデータがヒープメモリに移行する場合は、スタックメモリの重要性と役割は分かりません。
説明してください。
次の2つの記事では、簡単な方法でメモリ管理について詳しく説明しています。
スタックは、主にローカル変数用であり、コールツリー内の変数を追跡します。 – juharr
Eric Lippertの[The Stack Is Implementation Detail]を読んでください(https://blogs.msdn.microsoft.com/ericlippert/2009/04/27/the-stack-is-an-implementation-detail-part-one/) 。 –
スタックはプッシュしてポップするので便利です。それは小さな利点ではありません。だからこそスタックがあるのです。メモリ割り当てシナリオでも役に立つことがあります。また、そこからEric Lippertの説明が届きます。 –