1. ホーム
  2. c#

[解決済み] メモリ割り当て。スタックとヒープ?

2023-04-10 12:54:42

質問

メモリ割り当ての基本で混乱しています。 スタックとヒープ . 標準的な定義(誰もが言うこと)によると、すべての 値の型 に割り当てられます。 スタック 参照 タイプは ヒープ .

では、次のような例を考えてみましょう。

class MyClass
{
    int myInt = 0;    
    string myString = "Something";
}

class Program
{
    static void Main(string[] args)
    {
       MyClass m = new MyClass();
    }
}

さて、C#ではメモリ確保はどのように行われるのでしょうか?のオブジェクトは MyClass (つまり m ) は完全にヒープに割り当てられるのでしょうか?つまり int myIntstring myString の両方がヒープに行くのでしょうか?

または、オブジェクトは2つの部分に分割され、スタックとヒープという両方のメモリ位置に割り当てられるのでしょうか?

どのように解決するのですか?

m はヒープ上に確保され、その中には myInt . プリミティブ型(と構造体)がスタック上に確保される状況は、メソッド呼び出しの時で、(その方が速いので)スタック上にローカル変数のための領域を確保するのです。例えば

class MyClass
{
    int myInt = 0;

    string myString = "Something";

    void Foo(int x, int y) {
       int rv = x + y + myInt;
       myInt = 2^rv;
    }
}

rv , x , y は全てスタック上に存在することになります。 myInt はヒープ上のどこかにあります (そして、そのアクセスは this ポインターを介してアクセスする必要があります)。