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


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

6 119

6 ответов:

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

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

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

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

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

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

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

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

есть и другие структуры, такие как бассейны, стеки и кучи.

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

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

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

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

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