回答:
おそらく、データ構造の観点からではなく、メモリ割り当ての観点からヒープを意味します(この用語には複数の意味があります)。
非常に簡単な説明は、ヒープは動的に割り当てられたメモリが常駐するメモリの一部であるということです(つまり、を介して割り当てられたメモリmalloc
)。ヒープから割り当てられたメモリは、次のいずれかが発生するまで割り当てられたままになります。
free
'd割り当てられたメモリへのすべての参照が失われた場合(たとえば、ポインタへのポインタをもう格納しないなど)、いわゆるメモリリークがあります。これはまだメモリが割り当てられている場所ですが、メモリに簡単にアクセスする方法はありません。リークしたメモリは、将来のメモリ割り当てのために再利用することはできませんが、プログラムが終了すると、メモリはオペレーティングシステムによって解放されます。
これを、ローカル変数(メソッド内で定義されたもの)が存在するスタックメモリと比較してください。スタックに割り当てられたメモリは、通常、関数が戻るまでしか存在しません(これには、静的ローカル変数など、いくつかの例外があります)。
ヒープは、メモリが割り当てられたり割り当て解除されたりする領域であり、順序はありません。これは、new
演算子または類似のものを使用してオブジェクトを作成するときに発生します。これは、メモリが先入れ先出し方式で割り当て解除されるスタックとは対照的です。
メモリヒープは、動的に割り当てられたメモリを保持するための一般的な構造です。ウィキペディアのDynamic_memory_allocationを参照してください。
他にも、プール、スタック、パイルなどの構造があります。
これは、プロセスで使用されているメモリマネージャによってオペレーティングシステムから割り当てられたメモリのチャンクです。malloc()
次に、他への呼び出しは、オペレーティングシステムを直接処理する代わりに、このヒープからメモリを取得します。