C++, Свободное Хранилище по сравнению с "кучей"

Два преимущества vi/vim:

  • это очень легко

  • , это установлено почти на каждом *, ОТКЛОНЯЮТ систему

112
задан Nick Dandoulakis 29 August 2009 в 08:22
поделиться

4 ответа

См. http://www.gotw.ca/gotw/009.htm ; он может описать различия между кучей и бесплатным хранилищем гораздо лучше, чем я:

Free-store:

Бесплатное хранилище - одно из двух области динамической памяти, выделенные / освобожденные по новому / удалению. Время жизни объекта может быть меньше, чем время хранения выделено; то есть бесплатные объекты магазина может выделять память без немедленно инициализируется, и может быть уничтоженным без памяти немедленно освобожден. Вовремя период, когда выделяется хранилище но вне времени жизни объекта доступ к хранилищу и манипулируют через пустоту * но никто нестатичности протообъекта члены или функции-члены могут быть получили доступ, их адреса заняты, или подвергаться иным манипуляциям.

Куча:

Куча - это другая динамическая память область, выделенная / освобожденная malloc / free и их варианты. Обратите внимание, что пока глобальный по умолчанию новый и удалить может быть реализован с точки зрения malloc и free по определенному компилятор, куча - это не то же самое, что свободное хранилище и память, выделенная в одном область не может быть безопасно освобождена в другой. Память, выделенная из куча может использоваться для объектов класса тип по размещению-новостройка и явное уничтожение. Если так используется, примечания о времени существования объекта бесплатного магазина применимо и здесь.

69
ответ дан 24 November 2019 в 02:52
поделиться

Термин «куча» также может относиться к конкретной структуре данных, но в контексте операций C ++ malloc, free, new и delete термины «куча» и «свободное хранилище» используются более или менее взаимозаменяемо.

4
ответ дан 24 November 2019 в 02:52
поделиться

Ответ Майка Коваля достаточно хорошо описывает теорию. Однако на практике это почти всегда одна и та же область памяти - в большинстве случаев, если вы покопаетесь в реализации компилятора new , вы обнаружите, что она вызывает malloc () .

Другими словами: с точки зрения машины, куча и свободное хранилище - одно и то же. Различие существует внутри компилятора.

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

24
ответ дан 24 November 2019 в 02:52
поделиться

Я не припомню, чтобы в стандарте когда-либо упоминалось слово «куча», за исключением описаний таких функций, как push_heap и др. Все динамические распределения выполняются в бесплатном хранилище.

2
ответ дан 24 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: