ДИНАМИ́ЧЕСКОЕ РАСПРЕДЕЛЕ́НИЕ ПА́МЯТИ
-
Рубрика: Технологии и техника
-
-
Скопировать библиографическую ссылку:
Книжная версия:
Электронная версия:
ДИНАМИ́ЧЕСКОЕ РАСПРЕДЕЛЕ́НИЕ ПА́МЯТИ, способ распределения оперативной памяти ЭВМ, при котором она выделяется и освобождается компилятором или операционной системой по запросам программы в ходе её выполнения. Как правило, Д. р. п. выбирается в тех случаях, когда на стадии компиляции не удаётся определить положение объекта (напр., процедуры) в некоторой области памяти и/или его размер. Для осуществления Д. р. п. компилятор устанавливает соответствие между лексич. единицами (идентификаторы, метки, константы и др.) исполняемой программы и адресами, размерами, а также атрибутами областей памяти (совокупностями объединённых между собой элементов памяти) вычислит. системы, отведённых для хранения этих лексич. единиц при выполнении программы. Выбор области памяти и выделение в ней соответствующих фрагментов проводятся как для объектов данных, так и для выполняемых фрагментов программ – операторов, блоков, функций и процедур. Управление областями памяти выполняется операц. системой на основе использования технологий виртуальной памяти с сегментной, страничной или сегментно-страничной организацией. В динамич. области памяти могут располагаться как зоны, выделяемые пользователем (работающей программой), так и зоны, выделяемые компилятором автоматически, но и те и другие выделяются в процессе выполнения программы.
Существуют разл. методы Д. р. п., наиболее известными из которых являются стековый и метод произвольного распределения (распределение в «куче»). При стековом методе Д. р. п. на запросы ресурсов памяти выделяется некоторая область свободной оперативной памяти (стек), в которой проводится работа с фрагментами памяти по правилу «последний пришёл – первый вышел». Этот метод обычно выбирается для выделения памяти под локальные переменные блоков и процедур, а также под записи об активации процедур.
При произвольном методе Д. р. п. выделение и освобождение фрагментов памяти осуществляется по произвольным запросам без к.-л. системы. Произвольное Д. р. п. может производиться самим разработчиком программы (т. е. явно) или осуществляться автоматически (т. е. неявно). Д. р. п. для переменных, создаваемых по явному запросу, разработчик проводит, как правило, с помощью спец. операторов или библиотечных функций (напр., операторы ALLOCATE в языке PL/1, new в Pascal и Сi++, функция malloc в Сi). Эти операторы и функции, в свою очередь, могут использовать возможности операц. системы, а могут производить Д. р. п. самостоятельно, в рамках статически выделенного большого участка памяти.
Автоматическое Д. р. п. осуществляется, если в программе используются такие операции над данными, которые требуют перераспределения памяти, а сами операторы перераспределения в программе отсутствуют [напр., операция слияния значений (конкатенации) строковых переменных в языке Basic или в языке Object Pascal]. Также автоматически проводится управление сегментами и страницами памяти в операц. системах, которые для этого могут пользоваться аппаратной поддержкой.
При применении метода произвольного Д. р. п. возникает серьёзная проблема освобождения памяти и повторно-го использования освобождённых фрагментов (т. к. моменты возврата памяти не всегда очевидны, а порядок возврата памяти непредсказуем), которая имеет разл. решения в зависимости от метода выделения участков памяти. Напр., выделенная ранее память пересматривается с целью обнаружения неиспользуемых фрагментов, а высвобожденная память передаётся для повторного использования.