Ответы:
Предположительно вы имеете в виду кучу с точки зрения выделения памяти, а не с точки зрения структуры данных (термин имеет несколько значений).
Очень простое объяснение состоит в том, что куча - это часть памяти, в которой находится динамически распределенная память (т.е. память, выделенная через malloc
). Память, выделенная из кучи, останется выделенной, пока не произойдет одно из следующих событий:
free
«дЕсли все ссылки на выделенную память потеряны (например, вы больше не храните указатель на нее), у вас есть то, что называется утечкой памяти . Это место, где память все еще была выделена, но у вас больше нет простого доступа к ней. Утечка памяти не может быть восстановлена для будущих распределений памяти, но когда программа завершится, память будет освобождена операционной системой.
Сравните это со стековой памятью, в которой живут локальные переменные (определенные в методе). Память, выделенная в стеке, обычно живет только до тех пор, пока функция не вернется (есть некоторые исключения из этого, например, статические локальные переменные).
Вы можете найти больше информации о куче в этой статье .
Куча памяти - это место в памяти, где память может быть выделена при произвольном доступе.
В отличие от стека, в котором память выделяется и освобождается в очень определенном порядке, отдельные элементы данных, выделенные в куче, обычно освобождаются асинхронно друг от друга. Любой такой элемент данных освобождается, когда программа явно освобождает соответствующий указатель, и это может привести к фрагментарной куче. В противоположность, могут быть освобождены только данные сверху (или снизу, в зависимости от того, как работает стек), в результате чего элемент данных освобождается в обратном порядке, в котором они были выделены.
Куча - это просто область, где память выделяется или освобождается без какого-либо порядка. Это происходит, когда кто-то создает объект, используя new
оператор или что-то подобное. Это противоположно стеку, где память освобождается в порядке очереди.
Куча памяти - это общая структура для хранения динамически выделяемой памяти. Смотрите Dynamic_memory_allocation в Википедии.
Существуют и другие сооружения, такие как бассейны, штабеля и сваи.
Это кусок памяти, выделенный из операционной системы диспетчером памяти, используемым процессом. Призывы к malloc()
et alia затем извлекают память из этой кучи вместо того, чтобы иметь дело с операционной системой напрямую.
Вы, вероятно, имеете в виду кучу памяти, а не кучу памяти.
Кучи памяти - это, по сути, большой пул памяти (обычно на процесс), из которого работающая программа может запрашивать порции. Обычно это называется динамическим распределением .
Он отличается от стека, где расположены «автоматические переменные». Так, например, когда вы определяете в функции C переменную-указатель, в стеке выделяется достаточно места для хранения адреса памяти. Однако вам часто потребуется динамически распределять пространство (с помощью malloc) в куче, а затем указывать адрес, с которого этот фрагмент памяти начинает указатель.