жений. Для временного хранения данных при вычислении выражений и обмена информацией с вызываемыми функциями и процедурами используется используется область ОЗУ, в которой организуется так называемый стек. Логика функционирования стека предельно проста:

• записанные в стек данные образуют очередь,

• последняя записанная в стек информация читается первой, после

чего предшествующая ей информация становится последней в

очереди.

Хотя с житейской точки зрения это правило обслуживания очереди кажется нелепым, с точки зрения программирования это очень удобно, так как команды записи в стек и чтения из него не нуждаются в указании адреса (адрес вычисляется аппаратурой компьютера) и все промежуточные значения находятся в ОЗУ ровно столько времени, сколько нужно для вычисления значения выражения. Итоговое вычисленное значение сохраняется в ОЗУ по адресу, соответствующему идентификатору той переменной, которой оно присвоено (разумеется, если был выполнен оператор присваивания). Значения выражений, входящих в операторы других типов и своевременно не записанные в ОЗУ оператором присваивания, недоступны программе и безвозвратно теряются.

Поскольку стек используется для вычисления выражений и организации связей со всеми функциями и процедурами программы, его размер (довольно большой) иногда может оказаться недостаточным для выполнения программы, тогда интерпретирующая программа выдает сообщение «слишком сложное выражение». В этом случае может помочь вычисление выражения, вызвавшего переполнение стека, по частям. Например, если сложное выражение можно представить в виде суммы двух более простых, то необходимо вычислить (с присвоением значений вновь введенным переменным) каждое из слагаемых, и только затем вычислить сумму.

При необходимости возможно изменение объема памяти, отводимого под стек (в пределах 64К), посредством процедуры CLEAR [,, stacks] (1.26), которая закрывает все файлы, освобождает буферы файлов, устанавливает в нуль все переменные, массивы и общие области памяти, очищает все строковые переменные и инициализирует стек. При использовании аргумента stacks устанавливается размер стека (в байтах) для работы программы.

В составе больших программ обычно используются создаваемые пользователем подпрограммы (функции и процедуры), поэтому для них также применяются команды управления хранением данных в ОЗУ, которые будут рассмотрены при описании их синтаксиса подпрограмм.

Много места в ОЗУ могут занимать массивы данных, поэтому в языке QBasic имеются команды управления использованием области памяти, отведенной под массивы. В отличие от вычисления выражений здесь не удалось автоматизировать разделение данных на постоянно и временно хранимые, поэтому забота об экономии памяти при обработке массивов возлагается на программиста.

Для этого интерпретирующая программа организует статическое и динамическое хранение массивов. Место для статического хранения отво-