Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Куча в информатике и программировании

Определение 1

Куча в информатике и программировании — это наименование структурного построения информационных данных, которое даёт возможность реализовать динамическое распределение памяти приложения.

Сегодня программисты применяют наиболее совершенные программные языки, позволяющие при меньших размерах программных приложений достигать великолепных результатов. Но эта оптимизация тоже не проходит даром. Так как программисты сегодня почти не обращаются к проблемам низкого программного уровня, то многие из них почти забыли, что означают термины куча и стек, в чём заключается процесс компиляции и так далее. Конечно, это касается далеко не всех, занимающихся программированием, специалистов, но такая тенденция налицо.

Понятие кучи

Определение 2

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

Это не стек, а складское хранилище для программных переменных. Когда выполняется выделение зоны памяти в куче для сохранения переменных, то к ним возможно обращение как в потоке, так и во всём приложении. Глобальные переменные, как правило, так и задаются. После окончания работы программного приложения все зоны оперативной памяти, которые выделялись для его нужд, очищаются.

Объём памяти кучи формируется после запуска приложения, но он отличается от стекового формата тем, что у него есть только физические ограничения. Это и даёт возможность создания динамических переменных.

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

«Куча в информатике и программировании» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

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

Замечание 1

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

Принцип работы кучи

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

Очистка памяти приложением осуществляется при помощи функций класса free().

Вся область памяти, выделенная под кучу, подразделяется на используемую, то есть ту, которая выделена приложению при помощи функций класса malloc(), и не используемую, то есть ещё не занимаемую или уже очищенную при помощи функций класса free().

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

  1. Выполняют просмотр списка свободных и занятых участков памяти, выделенных под кучу, с целью поиска свободных участков, требуемого размера.
  2. При недостаточном объёме свободной памяти, функция имеет право запроса добавочных участков памяти у операционной системы.
  3. Может добавить обнаруженный участок памяти в список занятых и просто сделать пометку занятости.
  4. Выполняет возврат указателя в начало участка памяти.
  5. Если по различным причинам процедура выделения памяти не выполнена, то функция выдаёт сообщение об ошибке. Это может быть сообщения типа NULL.

Функции класса free() осуществляют ориентировочно такой набор операций:

  1. Выполняют просмотр списка свободных и занятых участков памяти, отведённых под кучу, с целью найти требуемую область.
  2. Выполняет удаление из списка занятых обнаруженный участок памяти.
  3. Выполняет прибавление обнаруженного участка памяти кучи в перечень свободных.
Дата написания статьи: 25.12.2019
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot