Два преимущества vi/vim:
это очень легко
, это установлено почти на каждом *, ОТКЛОНЯЮТ систему
См. http://www.gotw.ca/gotw/009.htm ; он может описать различия между кучей и бесплатным хранилищем гораздо лучше, чем я:
Free-store:
Бесплатное хранилище - одно из двух области динамической памяти, выделенные / освобожденные по новому / удалению. Время жизни объекта может быть меньше, чем время хранения выделено; то есть бесплатные объекты магазина может выделять память без немедленно инициализируется, и может быть уничтоженным без памяти немедленно освобожден. Вовремя период, когда выделяется хранилище но вне времени жизни объекта доступ к хранилищу и манипулируют через пустоту * но никто нестатичности протообъекта члены или функции-члены могут быть получили доступ, их адреса заняты, или подвергаться иным манипуляциям.
Куча:
Куча - это другая динамическая память область, выделенная / освобожденная malloc / free и их варианты. Обратите внимание, что пока глобальный по умолчанию новый и удалить может быть реализован с точки зрения malloc и free по определенному компилятор, куча - это не то же самое, что свободное хранилище и память, выделенная в одном область не может быть безопасно освобождена в другой. Память, выделенная из куча может использоваться для объектов класса тип по размещению-новостройка и явное уничтожение. Если так используется, примечания о времени существования объекта бесплатного магазина применимо и здесь.
Термин «куча» также может относиться к конкретной структуре данных, но в контексте операций C ++ malloc, free, new и delete термины «куча» и «свободное хранилище» используются более или менее взаимозаменяемо.
Ответ Майка Коваля достаточно хорошо описывает теорию. Однако на практике это почти всегда одна и та же область памяти - в большинстве случаев, если вы покопаетесь в реализации компилятора new
, вы обнаружите, что она вызывает malloc ()
.
Другими словами: с точки зрения машины, куча и свободное хранилище - одно и то же. Различие существует внутри компилятора.
Чтобы еще больше запутать ситуацию, до появления C ++ мы говорили «куча» для обозначения того, что сейчас называется «свободным хранилищем».
Я не припомню, чтобы в стандарте когда-либо упоминалось слово «куча», за исключением описаний таких функций, как push_heap
и др. Все динамические распределения выполняются в бесплатном хранилище.