2009-03-19 3 views
21

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

За исключением того факта, что он растет с конца сегмента данных, я действительно не могу придумать вескую причину, тем более, что он имеет очень мало общего с структурой данных кучи.

Примечание: Многие люди упомянули, что это всего лишь целая куча вещей, которые являются неорганизованными. Но для меня термин куча физически означает кучу вещей, которые физически зависят друг от друга. Вы вытаскиваете его снизу, все остальное рушится на нем и т. Д. Другими словами, для меня звучит куча, слабо организованная (например, последние вещи сверху). Это не совсем так, как куча на самом деле работает на большинстве компьютеров, хотя, если вы поместили материал в начало кучи, а затем выросли, я думаю, это может сработать.

+3

Не принимайте «кучу» буквально. Деревья имеют один корень, но не в реальной жизни. Очереди могут извлекаться только с концов, но в реальной жизни люди могут покидать очереди посередине, когда они устают ждать. Ненасытные люди также могут вдаваться. – paxdiablo

+0

Свободная память «куча» не рушится, хотя (не так ли?). Он может фрагментироваться, поскольку память распределяется и освобождается. –

+0

Связанные записи [здесь] (https://stackoverflow.com/q/1699057/465053) и [здесь] (https: // stackoverflow.ком/кв/756861/465053). – RBT

ответ

30

Кнут отвергает термин «кучу», используемый как синоним для свободного магазина памяти.

Несколько авторов начали с 1975 года, чтобы назвать пул доступной памяти «кучей»."Но в данной серии книг, мы будем использовать это слово только в более традиционном смысле, связанных с очередями приоритетов. (Фундаментальные алгоритмы, 3-е изд., стр. 435)

+0

+1 для единственного ответа с любым историческим контекстом. –

+2

Бах, Кнут. Что он знает о структурах данных? :-) Это его решение, конечно, но он хорошо в меньшинстве, несмотря на свою славу. – paxdiablo

+3

@Pax: Да, «куча» определенно попалась, несмотря на усилия Кнута. Кажется, что это связано с его использованием в модели памяти С, которая набирала бы обороты в тот момент, когда Кнут ссылается на цитату. –

3

Это неупорядоченный. «Куча» хранилища.

Это не заказ heap data structure.

+0

Вероятно, в отличие от упорядоченного стека. – Michael

+0

Мне нравится думать об этом как неупорядоченная куча , ака «куча», как вы указали. –

+0

Но посмотрите, когда я думаю о физической куче дерьма (например, о моем столе), я не вижу случайной памяти, я вижу что-то, что имеет структуру, потому что каждый элемент лежит поверх других предметов ... – Uri

16

Для чего это стоит, ALGOL68, который предшествовал C, имел фактического ключевого словаheap, который был использован для выделения места для переменного с «глобальной кучи», в отличие от loc выделившего его в стек.

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

Как и большинство имен, это, вероятно, думал о какой-кодером (в данном случае, я думаю, Деннис Ритчи, Кен Томпсон и Брайан Керниган, поэтому на самом деле не просто некоторые кодер), который только что необходимое имя ,

Я часто слышал об этом, иногда называемом ареной (сообщение об ошибке от многих лун назад, говорящее, что «память арена повреждена»). Это воспитывает изображения кусков памяти, делающих битву в гладиаторском стиле внутри вашего адресного пространства (a la the movie Tron).

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

Я помню, когда мы собирали пакеты протоколов связи даже до того, как 7-слойная модель OSI была чёрным взглядом, мы использовали многоуровневый подход и должны были придумывать имена на каждом уровне для блоков.

Мы использовали блоки, сегменты, куски, секции и различные другие названия, все, что просто указывало на предмет фиксированной длины. Может быть, что куча имели сходное происхождение:

"Hey, Bob, what's a good name for a data structure that just doles out random bits of memory from a big area?"

"How about 'steaming pile'?"

"Thanks, Bob, I'll just opt for 'heap', if that's okay with you. By the way, how are things going with the divorce?"

+0

Что вы подразумеваете под DRK/BWK-классом? – hasen

+0

Typo, предназначался для DMR/BWK для Ritchie и Kernighan (и теперь я вспомнил, что у Кен Томпсона тоже была большая часть, поэтому я добавил его в огромные извинения за это, KT). – paxdiablo

+0

Они изобрели UNIX и C, кстати, на всякий случай имена не сразу регистрируются ни с кем. – paxdiablo

1

Так же, как Java и JavaScript , куча (свободный магазин) и куча (структура данных) называются такими, чтобы обеспечить, чтобы наше братство было непроницаемым для посторонних, таким образом сохраняя нашу работу.

1

Это большая запутанная груда неорганизованного мусора, в котором ничего не может быть если вы точно не знаете, где искать.

1

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

3

Я не знаю, было ли это первым, но у ALGOL 68 было ключевое слово 'heap' для выделения памяти из свободной кучи памяти.

Первое использование «кучи», скорее всего, можно найти где-то между 1958 г., когда Джон Маккарти изобрел сбор мусора для Лиспа и развития АЛГОЛа 68

0

Heap обычно имеет следующие особенности:

  1. Вы не можете предсказать адрес блока malloc().

  2. Вы не знаете, как адрес, возвращаемый следующим malloc(), связан с адресом предыдущего.

  3. Вы можете использовать блоки malloc() с переменными размерами.

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

+0

Пул (памяти)? – TrayMan

+0

Согласно словарям «пул» более подходит для однородных объектов. Куски в свободном магазине могут иметь переменные размеры и поэтому не очень однородны. – sharptooth

15

Это название кучи для контрастного изображения, которое оно вызывает в виде фокуса стек.

  • В стопке предметов, предметы сидеть один на другой в том порядке, они были размещены там, и вы можете только удалить верхний один (без опрокидывания все это над).

    Stack like a stack of papers

  • В куче, нет никакого особого для того, чтобы на пути элементы размещены. Вы можете использовать и удалять элементы в любом порядке, потому что нет четкого «верхнего» элемента.

    Heap like a heap of licorice allsorts

Это делает довольно хорошую работу описания двух способов выделения и освобождения памяти в стек и кучу. Yum!

+0

Хотя этот ответ не ссылается ни на какой внешний источник, он звучит наиболее правдоподобно. – gooli

+0

Можем ли мы получить обновление изображений? Они больше не загружаются. –

+2

Изображения теперь исправлены :) – thomasrutter

Смежные вопросы