Что такое куча памяти? - PullRequest
       1

Что такое куча памяти?

134 голосов
/ 22 февраля 2010

Что такое куча памяти?

Ответы [ 6 ]

185 голосов
/ 22 февраля 2010

Предположительно, вы имеете в виду куча с точки зрения выделения памяти, а не с точки зрения структуры данных (термин имеет несколько значений).

Очень простое объяснение состоит в том, что heap - это часть памяти, в которой находится , динамически выделенная память (то есть память, выделенная через malloc). Память, выделенная из кучи, будет выделяться до тех пор, пока не произойдет одно из следующих событий:

  1. Память free 'd
  2. Программа завершается

Если все ссылки на выделенную память потеряны (например, вы больше не сохраняете указатель на нее), у вас есть то, что называется утечка памяти . Это место, где память все еще была выделена, но у вас больше нет простого доступа к ней. Утечка памяти не может быть возвращена для будущих распределений памяти, но когда программа завершится, операционная система освободит память.

Сравните это с stack memory, в которой находятся локальные переменные (определенные в методе). Память, выделенная в стеке, обычно живет только до тех пор, пока функция не вернется (есть некоторые исключения, например статические локальные переменные).

Вы можете найти больше информации о куче в этой статье .

12 голосов
/ 22 февраля 2010

Память куча - это место в памяти, где память может выделяться при произвольном доступе.
В отличие от стека где память выделяется и освобождается в очень определенном порядке, отдельные элементы данных, выделенные в куче, обычно освобождаются способами, которые являются асинхронными друг от друга. Любой такой элемент данных освобождается, когда программа явно освобождает соответствующий указатель, и это может привести к фрагментарной куче. В противоположность могут быть освобождены только данные сверху (или снизу, в зависимости от того, как работает стек), в результате чего элемент данных освобождается в обратном порядке, в котором они были выделены.

7 голосов
/ 22 февраля 2010

Куча памяти - это общая структура для хранения динамически выделяемой памяти. См. Dynamic_memory_allocation в Википедии.

Существуют и другие сооружения, такие как бассейны, стеки и сваи.

6 голосов
/ 22 февраля 2010

Куча - это просто область, где память выделяется или освобождается без какого-либо порядка. Это происходит, когда кто-то создает объект, используя оператор new или что-то подобное. Это противоположно стеку, в котором память освобождается в порядке очереди.

6 голосов
/ 22 февраля 2010

Вы, вероятно, имеете в виду кучу памяти, а не кучу памяти.

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

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

5 голосов
/ 22 февраля 2010

Это кусок памяти, выделенный из операционной системы диспетчером памяти, используемым процессом. Вызовы malloc() и др. Затем извлекают память из этой кучи вместо того, чтобы иметь дело непосредственно с операционной системой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...