Реферат: Распределение памяти
Области данных делятся на два класса - статический и
динамический. Статическая область данных имеет постоянное число
ячеек, выделенных ей перед началом счета. Эти ячейки выделяются
на все время счета. Следовательно, на переменную в статической
области данных возможна ссылка по ее абсолютному адресу вместо
пары ( адрес базы, смещение ).
Динамическая область данных не всегда присутствует во время
счета. Она появляется и исчезает, и всякий раз, когда она
исчезает, теряются все величины, хранящиеся в ней.
2. Описатели
Если компилятор знает все характеристики переменных во
время компиляции, то он может сгенерировать полностью команды
обращения к переменным, основываясь на этих характеристиках. Но
во многих случаях информация может задаваться динамически во
время счета. Например, в АЛГОЛе не известны нижняя и верхняя
границы размерностей массивов, а в некоторых языках тип
фактических параметров не соответствует точно типу формальных
параметров. В таких случаях компилятор не может сгенерировать
простые и эффективные команды, так как он должен учитывать все
возможные варианты характеристик.
Чтобы решить эту задачу, компилятор выделяет память не
только для переменных, но и для их описателей, которые содержат
атрибуты ( характеристики ), определяемые во время счета. Этот
описатель заполняется и изменяется по мере того, как становятся
известными и меняются характеристики при счете.
Возьмем простой пример: если формальный параметр является
простой переменной и тип соответствующего фактического параметра
может меняться, фактический параметр, передаваемый процедуре,
может выглядеть, например, так: