В чем разница между кучей и бесплатным магазином?
Первоначально во время войны с педантикой на @Als отвечал здесь, это также вызвало дискуссию в чате на С++.
Эта статья Херба Саттера различает эти две, но также старше десятилетия, так как она была написана до 2000 года, а также говорит о стандартном проекте, что может означать только проект С++ 98. Хотя, я все еще ожидаю, что Херб, как часть комитета, будет хорошо осведомлен об этом.
Я знаю этот и этот вопрос/ответ, но второй просто цитирует статью о траве, пока сначала цитирует другой источник, который просто отвергает использование термина "куча", иначе они оба не совсем удовлетворительны. Кроме того, я не могу найти тег free-store
или freestore
на SO (до этого вопроса я создал первый сейчас).
Теперь, какая разница, если таковая имеется?
Ответы
Ответ 1
Ну, в текущем стандарте С++ используется только термин "свободный магазин" - единственное использование "кучи" в стандарте - это описание структуры данных кучи в стандартной библиотеке. Так что "куча" - не очень полезный термин для использования при попытке точно обсудить проблемы С++, хотя, конечно, все это делают.
Ответ 2
В книге Херб "Исключительный C++" он определяет:
Куча: Динамическая область памяти, которая выделяется/освобождается функциями malloc
/free
.
Свободный магазин: Динамическая область памяти, которая выделяется/освобождается new
/delete
.
Возможно, что для new
и delete
реализованы в терминах malloc
и free
, так что технически они могут быть той же областью памяти. Однако, поскольку стандарт не указывает на это, лучше всего рассматривать их отдельно, а не смешивать malloc
/delete
или new
/free
.
Ответ 3
free-store
технически не является кучей, точно так же, как локальные переменные технически не находятся в стеке. Тем не менее, очень редко в моем опыте найти любого, кто не примет эти условия.