Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

  • Память free 'd
  • Программа завершает

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

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

Более подробную информацию о куче можно найти в в этой статье.

Ответ 2

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

Ответ 3

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

Существуют и другие структуры, такие как пулы, стопки и сваи.

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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