Какая связь между кучей "а" и "кучей"? - PullRequest
30 голосов
/ 16 апреля 2009

Куча - это древовидная структура данных, где более высокие уровни дерева всегда содержат большие (или меньшие, если так настроены) значения, чем более низкие уровни. «Куча» - это куча свободной оперативной памяти, которую программа имеет для динамического выделения. Их обоих называют «куча», но какое отношение одно имеет к другому?

Ответы [ 9 ]

25 голосов
/ 16 апреля 2009

Ничего особенного, если честно. Я бы предположил, что слово куча было просто взято из его повседневного (нетехнического) использования и применено к этим двум понятиям индивидуально как достаточно хорошие аналогии.

В первом случае (значение древовидной структуры данных) описание heap является наиболее подходящим, поскольку «большие» объекты размещаются выше в дереве (где «больше» определяется произвольной ключевой функцией). ) - то есть есть что-то вроде кучи мелких предметов поверх больших (или больше сверху, в зависимости от того, как вы к этому относитесь). Это просто, как я бы истолковал это; Тот, кто первым применил имя куча к этой структуре данных, подумал, что это подходящее имя в его голове, и оно просто застряло.

Во втором случае (куски оперативной памяти) имя кучи, возможно, несколько более очевидно. Здесь «куча» - это просто «большая коллекция вещей в произвольном порядке», которая, как представляется, применима также и в обычном использовании, как и к динамически выделяемым фрагментам памяти.

В любом случае, я бы не беспокоился об абстрактных метафорических сходствах, которые вы можете провести между двумя идеями. Относитесь к ним совершенно по-отдельности, и в любой ситуации вы не ошибетесь.

Редактировать: Кажется, древовидная структура данных может взяла свое название от куча абстрактной алгебры, что достаточно распространено в компьютерной науке. , Однако я не хотел бы подтвердить или опровергнуть это ...

8 голосов
/ 16 апреля 2009

Смотрите этот самый сайт для исследования происхождения имени "куча" для свободного хранения памяти.

5 голосов
/ 16 апреля 2009

У них обоих одинаковое имя, вот и все.
Там «куча» никогда не организована как фактическая структура данных кучи.

3 голосов
/ 16 апреля 2009

Куча (структура данных) называется так, потому что если вы рисуете ее, она выглядит как куча. Куча (память) называется кучей, потому что она как-то организована, но не полностью. Вы накапливаете данные в куче, но у вас могут быть дыры и неровности. Это как если бы вы положили бумаги в кучу. Иногда вы удаляете один снизу. Это имеет форму кучи, то есть как-то организовано, но не полностью.

2 голосов
/ 16 апреля 2009

Единственное отношение между ними - это имя "куча".

2 голосов
/ 16 апреля 2009

Они ... имеют одинаковое имя! Вот и все.

1 голос
/ 22 июня 2009

Чтобы еще более усложнить вопрос: в некоторых системах (например, в Microsoft Windows) имеется несколько «куч» в смысле выделения памяти. «Куча» - это просто по умолчанию куча . Но если вы звоните HeapAlloc(), вы можете выбрать, из какого выделения памяти вы хотите перераспределить.

1 голос
/ 16 апреля 2009

Ничего. Нет отношения.

0 голосов
/ 16 апреля 2009

Определение с answers.com

Куча: группа вещей, помещенных или брошенных друг на друга: куча грязных тряпок, лежащих в углу.

Это просто базовое наименование из-за концептуального образа бросания вещей неупорядоченным образом. Как отмечают другие авторы, куча не организована как структура данных кучи. Это зависит от процедур выделения памяти в вашей системной библиотеке (например, проверьте, как работает malloc)

...