Язык программирования Форт


Глава 14. Память Форта. Словари и контекстные словари - часть 5


Слово PAD можно описать как : PAD HERE n + ; . где n- фиксированное число (по крайней мере 65 в большинстве версий Форта и по меньшей мере 85 в Форт-83). Как и в случае HERE, легко подумать о PAD как о константе, а не как о слове, которое вычисляет адрес. Как вы видели в предшествующих главах, PAD весьма полезен для временного запоминания данных, так как он никогда не может быть в конфликте со словарем. PAD не пригоден для длительного запоминания, потому что некоторые слова Форта используют его и из-за того, что он смещается при изменении размера словаря.

В большинстве версий Форта стек параметров размещается в области старших адресов памяти и в конце первых 64К байт (далее могут размещаться блочные буферы). Между PAD и стеком параметров - переменное число свободных ячеек памяти (сам временный буфер), это число зависит от нескольких факторов, включая размер памяти ЭВМ, от конфигурации Форта, размера словаря и числа кодов в стеке параметров. Свободная память может лежать в интервале от нескольких до многих тысяч байтов и может быть использована для системных процедур, таких как форматирование или создание копий содержимого диска. Главным образом область свободной памяти предназначена для использования словарем или стеком. Хотя словарь увеличивается от малых адресов к большим, стек параметров в действительности растет от своего начала в сторону меньших адресов. Это позволяет использовать свободную память как для словаря, так и для стека по необходимости. Вы можете понять, почему переполнение стека имеет катастрофические последствия. Переполненный стек может наложиться на PAD, HERE и на верхнюю часть словаря, разрушив его. Это может, вероятно, случиться при беззаботном описании слов, которые оставляют в стеке что-то при зацикливании. И конечно, размер словаря ограничен, так как нельзя двигать PAD дальше, чем на верх стека параметров.

Стеки

Как контролируется содержимое стека? С помощью указателя. Если мы произвольно установим начало стека по адресу 1000, мы сможем представить шесть байтов области стека как




Начало  Назад  Вперед