私はメモリ割り当ての概念について読んでいました。ここで、オブジェクト型には動的メモリが必要であり、プリミティブ型には静的メモリが必要であるというステートメントを見つけました。要件が動的メモリの場合、ヒープに割り当てられるか、スタックに移動することを正当化します。
なぜこれがそうなのかという概念がわかりませんか?
すべての助けに感謝します。
ありがとう
私はメモリ割り当ての概念について読んでいました。ここで、オブジェクト型には動的メモリが必要であり、プリミティブ型には静的メモリが必要であるというステートメントを見つけました。要件が動的メモリの場合、ヒープに割り当てられるか、スタックに移動することを正当化します。
なぜこれがそうなのかという概念がわかりませんか?
すべての助けに感謝します。
ありがとう
この回答は100%完全ではありませんが、これの一部は関連しており、単にコメントする担当者がいません...
ヒープはプログラムの存続期間中ずっと存在し、(一般的に) はるかに大きいため、スタック メモリが過負荷にならないように (C# や Java などのメモリ管理言語の) オブジェクトをヒープに割り当てるという設計上の決定が必要になる場合があります。また、スタック メモリは、スタックの性質上、変数スコープ (使用可能な場合) に関連付けられています。メモリ マネージャーがオブジェクトを処理する場合は、変数がオブジェクトから飛び出すたびにではなく、特定の時間に処理する方が効率的です。スタック。ヒープには可変サイズの制限もありません。これにより、クラスで定義されている内容に応じて非常に大きくなる可能性があるオブジェクトをより現実的に収容できます。
2つの違い(スタック、ヒープ)の非常に良い説明は次のとおりです
。
これも非常に優れていますが、C 向けです:
http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html
ただし、これらのリンクはどちらも C# の WHY に具体的に対処していません。私はおそらくこの答えに夢中になるでしょう:)
オブジェクトが動的メモリを必要とし、プリミティブが静的メモリを必要とする理由は、プリミティブ型のサイズが事前定義されているためです。したがって、静的メモリに配置できます。オブジェクトのサイズは実行前にわからない場合があるため、メモリは動的に割り当てられます。