重複の可能性:
スタックとヒープの内容と場所
C# ではヒープとスタックに違いがあります。スタックはRAMで、ヒープはハードドライブだといつも思っていたことに気づきました。しかし、今はそれが正しいかどうかわかりません。そうでない場合、それらが 1 つの場所に保管されている場合の違いは何ですか?
重複の可能性:
スタックとヒープの内容と場所
C# ではヒープとスタックに違いがあります。スタックはRAMで、ヒープはハードドライブだといつも思っていたことに気づきました。しかし、今はそれが正しいかどうかわかりません。そうでない場合、それらが 1 つの場所に保管されている場合の違いは何ですか?
「スタック」(より正確にはコール スタック) は自動的に管理されたメモリです (C のような「管理されていない言語」でも): ローカル変数は、プロシージャまたは関数の引数と戻りアドレスを含むスタック フレームのスタックに格納されます。戻ったときに復元する必要があるマシン固有の状態かもしれません。
ヒープメモリは、動的メモリ割り当てを満たすために使用されるRAM(または仮想アドレス空間)の一部です(malloc
Cで)。
ただし、C# では、ヒープとスタックの使用は実装の詳細です。ただし、実際には、参照型のオブジェクトはヒープに割り当てられます。値型データは、コンテキストに応じて、スタックとヒープの両方に格納できます (参照型オブジェクトの一部である場合など)。