куча



Автор Кристина задал вопрос в разделе Компьютеры, Связь

Что такое КУЧА в Pascal? и получил лучший ответ

Ответ от Dmitriy A. Karpov[гуру]
Куча (англ. heap) — в информатике и программировании регион зарезервированного адресного пространства, условное название структуры данных, поверх которой реализована динамическая память приложения.
Организация
Куча использует память, выделенную статически или запрошенную динамически у операционной системы. Эта память используется для размещения объектов, динамически созданных программой.
В любой момент времени существования кучи вся память, на которой работает куча, разделена на занятую и свободную. Занятая память использована под размещение объектов, уже созданных и ещё не освобождённых к этому моменту времени. Из объёма свободной памяти примитивы работы с кучей могут выделять память под новые объекты.
Для хранения данных о принадлежности памяти к занятой или свободной обычно используется дополнительная область памяти.
Принцип работы
Для размещения и удаления динамических объектов используются примитивы "создать объект" (например, malloc) и "удалить объект" (например, free). Кроме того, перед началом работы программы выполняется инициализация кучи, в ходе которой вся изначально выделенная под кучу память отмечается как свободная.
При размещении объекта реализация примитива "создать объект" просматривает доступную куче свободную память в поисках возможности разместить в ней объект требуемого размера. Многие реализации примитивов кучи могут в случае нехватики собственной свободной памяти запросить дополнительную память у операционной системы. В случае, если по тем или иным причинам разместить объект невозможно, примитив "создать объект" сообщает об ошибке (например, malloc возвращает 0). Выбранная область памяти отмечается как занятая. Примитив возвращает адрес начала выделенной области.
При удалении объекта реализация примитива "удалить объект" отмечает, что область, ранее использованная удаляемым объектом, теперь свободна.
В промежутках между вызовами примитивов "создать объект" и "удалить объект" выделенная под объект область памяти не может быть отдана ни под какой другой объект. Поэтому приложение может свободно пользоваться выделенной ему областью памяти. В то же время, после вызова примитива "удалить объект" освобождённая область может быть использована повторно или отдана операционной системе, поэтому использование указателя, полученного ранее от примитива "создать объект" будет приводить в сбоям или непредсказуемой работе программы.
Вызовы функций библиотек обычно происходят быстрее и требуют меньше ресурсов на исполнение, чем вызовы операционных систем.Источник:

Ответ от Dima Kravchenko[гуру]
(нераспредел ённая_память)

Ответ от Алексей Сутягин[гуру]
Куча (heap) - нераспределенная область памяти из которой по просьбе программиста выделяетя кусок, возвращается ссылка на его начало, либо программист "сдает" в кучу область памяти, которая ему больше не нужна.В системах с использованием архитектуры i386 с защищенной памятью (а это например сама Windows) куча не нужна - ты просишь систему дать тебе новый кусочек памяти, система его выделяет в физической памяти и транслирует в ТВОЕ адресное потранство. Закончил - отдаешь обратно. Если блок памяти ты не запросил, но попытался туда залезть - система тут же прибьет твое приложение как нарушителя, если ты работаешь не в 0 кольце защиты (а обычные програмы работают в третьем кольце, только драйвера работают в 0 кольце - им это нужно, чтобы напрямую управлять устройствами) .В системах на основе .NET понятие кучи еще более упрощено - если твой модуль (или отдельный класс) кто-то запустил, значит под него система уже выделила память, а то что не нужно, тут же "подметается" сборщиками мусора. Напрямую выделить память без создания класса - невозможно. При попытке залезть в чужую область тебя тут же прибьют. Это увеличивает изоляцию классов друг от друга, повышает надежность и исключает возможность "поедания" програмой памяти, что было свойственно для старых программ, которые "забывали" освобождать память.Поэтому современные пограммисты даже не знают, что такое куча, и что будет, если забыть сдать в нее мусор.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Что такое КУЧА в Pascal?
Куча память на Википедии
Посмотрите статью на википедии про Куча память
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*