Память. Верхний уровень

Динамическое распределение памяти

Распределение памяти в вычислительной системе предполагает ее выделение для разных видов команд и данных с целью обеспечить нужный объем и требуемое быстродействие памяти. Такое выделение проводится статически (команды и директивы транслятора) или динамически. Статическое выделение связано с резервированием памяти, например, под массивы. Если эта память не используется, то она все равно занята и недоступна программам. Динамическое выделение памяти предполагает, что память занята только на короткое время, а затем она освобождается. Выделим три уровня динамического распределения памяти: стек, виртуальная память, команды операционной системы.

  • Стек. Все переменные и массивы объединяются в заголовке функции. Они хранятся в стеке и освобождают память только при окончании выполнения функции. Во время выполнения функции стек может только увеличиваться, например, при выполнении рекурсивных обращений к другим функциям. Возможно неконтролируемое увеличение стека.
  • Виртуальная память - это механизм распределения памяти по страницам и загрузки этих страниц из внешней памяти. Он является основным методом динамического распределения памяти в ЭВМ и будет рассмотрен ниже. Механизм виртуальной памяти требует аппаратной и программной поддержки. В ряде случаев этот механизм неэффективен или им сложно воспользоваться. Например, в ситуации работы с большими кадрами изображений при ограниченной памяти или при отсутствии аппаратной поддержки.
  •  
  • Команды операционной системы. Вводятся две функции: выделение памяти и освобождения памяти. Функция, выделяющая память, резервирует необходимый объем памяти с заданными свойствами, а функция освобождения памяти освобождает память, и она может быть использована снова при выделении.

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

Яндекс.Метрика