|
Является ли схема организации модулей, описанная в предыдущем параграфе, достаточно универсальной? Чтобы ответить на этот вопрос, рассмотрим модуль, представленный подпрограммой 14.2.1. В таком виде, в каком он написан, он не удовлетворяет требованиям описанной выше схемы. Во-первых, он не может оставаться неизменным, если изменяется значение параметра п при Ьбращении к этому модулю *), потому что это значение фигурирует в качестве адреса + п в команде рп + 7 и, следовательно, при изменении п должен измениться сам этот адрес. Во-вторых, одним из параметров обращения к подпрограмме 14.2.1 является массив с, а схема § 4 предусматривает передачу информации от модуля к модулю только в виде содержимого отдельных ячеек. Здесь мы допускаем некоторую вольность в терминологии. Вместо «параметр п» следовало бы сказать «параметр обращения, соответствующий величине, фигурирующей в модуле под обозначением я». В примере, рассмотренном в § 2, таким параметром было число 1210, при других обращениях этот параметр может принимать совсем другие значения. В дальнейшем мы будем постоянно прибегать к такой сокращенной терминологии, если это не может привести к недоразумениям. Прямолинейное обобщение этой схемы — разрешение передавать информацию массивами — нельзя считать приемлемым. В самом деле, образование в памяти копии массива только для того, чтобы модуль мог работать с этой копией, а не с оригиналом, — это слишком расточительно с точки зрения экономии как времени работы программы, так и места в памяти. Далее, память, занятую такой копией массива, придется считать частью рабочей памяти модуля. Но тогда размер этой рабочей памяти будет зависеть от параметров обращения к модулю. Нетрудно понять, что это заметно осложнит распределение памяти под модули — придется либо распределять память с учетом всех предстоящих обращений к модулю, либо отказаться от предварительного (во время составления программы) распределения памяти и производить такое распределение во время работы программы. Такое динамическое, как его называют, распределение памяти уже не может произвести программист, его должна делать сама программа. С этой задачей можно справиться, но без особой нужды не следует идти по этому пути. Главное, в нашей задаче нет никакой надобности^.копировать массив с — подпрограмма 14.2.1 только использует, но не изменяет значения элементов этого массива. Поэтому нет оснований опасаться, что во время работы подпрограммы массив будет испорчен, а только это могло бы быть серьезной причиной для создания копии массива, с которой работала бы подпрограмма.
|