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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Давайте будем гением компьютера.