C++, Free-Store vs Heap



динамическое распределение с new/delete говорят, что это происходит на free-store,
пока malloc/free операции используйте кучу.



Я хотел бы знать, есть ли реальная разница на практике.

Делают ли компиляторы различие между этими двумя терминами? (бесплатная магазине и кучу, а не new/malloc)

692   7  

7 ответов:

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

Free-store:

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

кучи:

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

для C++ разница между свободным хранилищем и кучей стала чисто концептуальной. Как банка для сбора ошибок, и один для сбора печенья. Одно обозначено так, другое-иначе. Это обозначение предназначено для того, чтобы привести к тому, что вы никогда не смешиваете "новый" и "удалить" с "malloc", "realloc" или "free" (или наборы битовых уровней).

во время интервью хорошо сказать ,что " новый и удалить использовать бесплатный магазин, malloc и бесплатно использовать кучу; новый и удалите вызов конструктора и деструктора, соответственно, однако malloc и free не."Тем не менее, вы часто будете слышать, что сегменты памяти действительно находятся в одной и той же области - однако это может быть специфично для компилятора, то есть возможно, что оба могут обозначать разные пространства памяти как пулы (не знаю, почему это было бы, хотя).

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

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

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

куча и free-store не должны быть совместимыми. В противопоказанных контекстах, таких как в 8-битных микроконтроллерах AVR со стандартной библиотекой c++11, они даже не могут использоваться в одной программе. Свободное хранилище и куча выполняют свои распределения в одном и том же пространстве памяти, перезаписывая друг друга структуры и данные. В этом контексте Free store отличается и несовместим с кучей, потому что" создать/удалить библиотеку free store "проще (и быстрее), чем" malloc/free/realloc/calloc куча библиотека " и, таким образом, обеспечивает огромный прирост использования памяти для встроенного программиста C++ (в контексте, где у вас есть только 512 байт ОЗУ).

смотрите 8-битную стандартную библиотеку c++11/14 по адресу https://github.com/ambroise-leclerc/ETL/tree/master/libstd

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

Free Store-это пул не выделенной памяти кучи, предоставленный программе, которая используется программой для динамического выделения во время выполнения программы. Каждая программа снабжена пулом не выделенной памяти кучи, которую она может использовать во время выполнения. Этот пул доступной памяти называется свободным хранилищем программы. Выделенная свободная память хранилища не имеет имени.

Comments

    Ничего не найдено.