Каково происхождение термина "куча" для бесплатного магазина?

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

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

"Hey, Bob, what 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 okay with you. By the way, how are things going with the divorce?"

Ответ 3

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

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

    Stack like a stack of papers

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

    Heap like a heap of licorice allsorts

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

Ответ 4

Он неупорядочен. "Куча" хранилища.

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

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

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