Каково происхождение термина «куча» для бесплатного магазина? - PullRequest
22 голосов
/ 19 марта 2009

Я пытаюсь найти официальную (или достаточно вескую) причину, по которой бесплатный магазин обычно называют кучей.

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

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

Ответы [ 9 ]

33 голосов
/ 19 марта 2009

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

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

17 голосов
/ 19 марта 2009

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

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

Как и большинство имен, о нем, вероятно, думал какой-то кодер, которому просто нужно имя.

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

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

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

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

Кэрол: «Привет, Боб, как называть структуру данных, которая просто выделяет случайные биты памяти из большой области?»

Боб: «А как насчет« кипящей кучи конского навоза »?»

Кэрол: «Спасибо, Боб, я просто выберу« кучу », если с тобой все в порядке. Кстати, как дела с разводом?»

16 голосов
/ 19 марта 2009

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

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

    Stack like a stack of papers

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

    Heap like a heap of licorice allsorts

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

3 голосов
/ 19 марта 2009

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

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

3 голосов
/ 19 марта 2009

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

Это не упорядоченная структура данных кучи .

2 голосов
/ 19 марта 2009

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

1 голос
/ 19 марта 2009

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

1 голос
/ 19 марта 2009

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

0 голосов
/ 19 марта 2009

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

  1. Вы не можете предсказать адрес, который возвращает malloc ().

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

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

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

...