Часть полного текста документа:-¦ Введение 1. Области данных 2. Описатели 3. Память для данных элементарных типов 4. Память для массивов Векторы Матрицы Многомерные массивы 5. Память для структур Записи по Хоору Структуры PL/1 Структуры данных по Стендишу 6. Соответствие фактических и формальных параметров Вызов по ссылке Вызов по значению Вызов по результату Фиктивные аргументы Вызов по имени Имена массивов в качестве фактических параметров Имена процедур в качестве фактических параметров 7. Динамическое распределение памяти Метод помеченных границ для распределения памяти Сборка мусора Системы с двухуровневым распределением памяти 8. Объектно-ориентированные языки. Новые информационные структуры и память для них Введение Задачей распределения памяти является вычисление адресов для фрагментов программы и информационных объектов, исходя из фиксируемого при генерации взаимного их расположения, причем для адресов тех объектов, расположение которых в памяти нельзя определить статически ( при трансляции ), генерируются динамические вычисления этих адресов. Информационные объекты в процессе эволюции языков программирования также развивались - от простых переменных целого, символьного типов до субстанций которыми оперируют современные объектно-ориентированные языки. Ниже будут изложены механизмы распределения памяти для самых разнообразных информационных объектов. 1. Области данных Областью данных является ряд последовательных ячеек - блок оперативной памяти, - выделенный для данных, каким-то образом объединенных логически. Часто ( но не всегда ) все ячейки области данных принадлежат одной и той же области действия в программе на исходном языке; к ним может обращаться один и тот же набор инструкций ( т.е. этой областью действия может быть блок или тело процедуры ). Во время компиляции ячейка для любой переменной времени счета может быть представлена упорядоченной парой чисел ( номер области данных, смещение ), где номер области данных - это некоторый единственный номер, присвоенный области данных, а смещение - это адрес переменной относительно начала области данных. Когда мы генерируем команды обращения к переменной, эта пара переводится в действительный адрес переменной. Это обычно выполняется установкой адреса базы ( машинного адреса первой ячейки ) области данных на регистр и обращению к переменной по адресу, равному смещению плюс содержимое регистра. Пара ( номер области данных, смещение ) таким образом переводится в пару ( адрес базы, смещение ). Области данных делятся на два класса - статический и динамический. Статическая область данных имеет постоянное число ячеек, выделенных ей перед началом счета. Эти ячейки выделяются на все время счета. Следовательно, на переменную в статической области данных возможна ссылка по ее абсолютному адресу вместо пары ( адрес базы, смещение ). Динамическая область данных не всегда присутствует во время счета. ............ |