Подтвердить что ты не робот

В чем разница между кучей и бесплатным магазином?

Первоначально во время войны с педантикой на @Als отвечал здесь, это также вызвало дискуссию в чате на С++.

Эта статья Херба Саттера различает эти две, но также старше десятилетия, так как она была написана до 2000 года, а также говорит о стандартном проекте, что может означать только проект С++ 98. Хотя, я все еще ожидаю, что Херб, как часть комитета, будет хорошо осведомлен об этом.

Я знаю этот и этот вопрос/ответ, но второй просто цитирует статью о траве, пока сначала цитирует другой источник, который просто отвергает использование термина "куча", иначе они оба не совсем удовлетворительны. Кроме того, я не могу найти тег free-store или freestore на SO (до этого вопроса я создал первый сейчас).

Теперь, какая разница, если таковая имеется?

4b9b3361

Ответ 1

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

Ответ 2

В книге Херб "Исключительный C++" он определяет:

Куча: Динамическая область памяти, которая выделяется/освобождается функциями malloc/free.

Свободный магазин: Динамическая область памяти, которая выделяется/освобождается new/delete.

Возможно, что для new и delete реализованы в терминах malloc и free, так что технически они могут быть той же областью памяти. Однако, поскольку стандарт не указывает на это, лучше всего рассматривать их отдельно, а не смешивать malloc/delete или new/free.

Ответ 3

free-store технически не является кучей, точно так же, как локальные переменные технически не находятся в стеке. Тем не менее, очень редко в моем опыте найти любого, кто не примет эти условия.