まず、私は現在C#で作業しており、メモリ管理についても読んでいます。ここまでは、スタックメモリと管理されたヒープメモリの違いを説明するスタックオーバーフローについての素晴らしい解答を読みました。回答の大部分は、
int x = 5
と宣言すると、スタックメモリ内でx
の種類に十分なメモリを割り当てていると言います。
私はヒープメモリの説明を読むと、これがどのように機能するのか理解しますが、混乱します。
あなたがint x = 5
を言っている場合int
がSystem.Int32
の別名であることから、x
は技術的にSystem.Int32
構造体の新しいインスタンスを指すポインタのではないでしょうか?もしそうなら、インスタンスオブジェクトのために使用されるのでヒープメモリに格納されません。
thisチュートリアルでは、(class1 cls1 = new class1()
の行): スタックメモリは、オブジェクトのポインタとヒープのみに使用されていますか?
...スタック上にポインタを作成し、実際のオブジェクトは「ヒープ」と呼ばれる別のタイプのメモリ位置に格納されます。
このロジックでは、すべてがヒープに格納されず、スタックに格納されているポインタだけではありませんか?
System.String
、
System.Int64
、
System.Boolean
、
System.Decimal
など
の新しいインスタンスであることは、例えば、私は、しかしはっきりと私にはない、私はそれを理解と思ったので、私は、スタックはポインタのみのためであるかどうか、私が誤解しましどの部分誰かが説明いただければ幸いです。前もって感謝します。
'System.Int32'はクラスではなく構造体です。したがって、*ローカルとして*、それはおそらくスタックに割り当てられます。 – vcsjones
。NET CLRが変更され、「割り当てられたヒープ」と「割り当てられたスタック」の間の線が引き続き曖昧になりつつあります。 – vcsjones
そのチュートリアルでは、「新しいキーワードに当たったときには「ヒープ」に割り当てられます」と言っています。構造を使用するときは、新しいキーワードを使用する必要があります。それは部分的に私があまりにも混乱している理由です。 – Nathangrad