Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Зачем вообще нужна куча?

#память


Я прочитал много постов посвященных организации памяти, но мне по прежнему не ясно
зачем вообще нужна куча? Почему вместо нее не используется какой нибудь глобальный
стек или что-то вроде того?  
    


Ответы

Ответ 1



Думайте о куче как о структуре, из которой можно в любой момент попросить кусок памяти, и в которую можно в любой момент эту память вернуть. Со стеком такое не получится: в нём вы можете вернуть объект назад только после того, как все предыдущие объекты вернулись. Например, в гипотетическом языке, в котором есть лишь стек, вот такая конструкция: object* function() { aux_object* ao = new aux_object(); object* o = new object(); o -> copySettingsFrom(ao); delete ao; return o; } была бы невозможна, потому что освободить ao нельзя было бы до освобождения o!

Ответ 2



Во время работы программы в оперативный памяти выделяется СТЕК (с небольшим размером) в него загружается сама программа, эта программа может работать с данными большого размера и СТЕКа ей уже недостаточно. Для таких целей эти данные размещают в КУЧЕ и там же их обрабатывают. На пальцах можно в пример привести баню. Например вы хотите попарится в русской бане. для этого вы заходите сначала в небольшой предбанник и там раздеваетесь, а весь процесс мытья происходит в парилке, затем вы снова заходите в предбанник чтобы одеться и выйти из бани.

Ответ 3



Куча - очень простая структура данных для выделения памяти под другие структуры данных. Стек совершенно не подходит, в т.ч. для хранения информации о свободных и занятых ячейках, по причине того, что доступ к данным кучи не должен быть ограничен последним добавленным элементом.

Ответ 4



Грубо: куча нужна для динамического выделения в ней участков памяти нужного размера. По своей сути, и куча и стек - это участок физической памяти.

Комментариев нет:

Отправить комментарий