2011-01-08 7 views
16

重複の可能性:.NETで
Why are two different concepts both called “heap”?
What's the relationship between “a” heap and “the” heap?ヒープは実際にはヒープですか?

(およびJavaの私の知る限り)、オブジェクトが動的に割り当てられた領域は、マネージヒープと呼ばれています。ただし、管理されたヒープがどのように動作するかを記述するほとんどのdocumentationは、リンクされたリストやスタックなどの線形データ構造として表しています。

したがって、マネージヒープは実際にはheapですか、それとも他のデータ構造で実装されていますか?実際にヒープデータ構造を使用していない場合は、用語の意味がこの単語の意味をオーバーロードするような重大な失敗のようです。

実際にヒープデータ構造の場合、ヒーププロパティを満たす値は何ですか?割り当てられたメモリ領域のサイズ?

+0

+1私はすでにこの質問について疑問に思っています。 –

+0

http://stackoverflow.com/questions/1699057/why-are-two-different-concepts-both-called-heap –

答えて

14

いいえ、ヒープはheap-ordered binomial treeではありません。用語の衝突が間違っているのは私には分かりませんが、現在はヒープ日付の両方を使用しています(1970年中頃です)。歴史の一部はthis articleで議論されています。

+1

ワードヒープは、おそらく、従来の用語としてのデータ構造を超えて、それ自身の意味を引き継いでいます。私たちはそれを何と呼べばいいのでしょうか?それを「ヒープ」と呼ぶことなくどのように教えてくれるのでしょうか? –

+1

+1コンピュータプログラミングの芸術からの歴史的な参照。 –

+0

@ジョンK:私はネイティブスピーカー(英語)ではないので、コンピューティングにおける2つの別々の用途を除いて、「ヒープ」は私にはあまり意味がありません。 IIUCでは、従来の使用は「パイル」と同義である。 –

0

私の答えはわかりませんが、メモリが私のガベージコレクタで管理されているC#やJavaなどの言語では、メモリ領域は線形ではありません。 GCは解放可能なメモリを解放しています。メモリが不足すると、何らかの種類のデフラグを実行しているメモリが圧縮されます。これは、プログラムが "最後に"いくらかのスペースを作るために使うメモリのブロックを動かします。 なぜこの回答が必要ですか?低レベルのメモリ管理をしたいですか?

1

この意味で、「ヒープ」とは、重要なリソースを格納するために使用される特別なメモリ領域を意味します。この文脈では、「ヒープデータ構造」には関係しません。

1

私は確かにこれについて権限を持ってコメントする歴史的な知識はありませんが、.NETとJavaのオブジェクトのメモリ割り当てメカニズムを記述するのに使われるヒープという用語は、想像力豊かな言葉のようなもので、この大きな構造化されていない(開発者の視点から)大量の記憶が記憶されている。対照的に、「スタック」は、より構造化されたデータ領域のイメージを(デベロッパーの視点から)再現します。スタック上にあるものは、どこにヒープ上に存在するよりも重要です。これは明らかに(ウィキペディアより)いわゆるヒーププロパティを参照するために、「ヒープ」の単語を使用して、実際のheap data structure、非常に異なっている

Bは、の子ノードである場合キー(A)≥キー(B)を押します。

だから、実際には無関係です。 1つは説明的な用語であり、もう1つははるかに正式な定義です。