|
|
|
|
Локальная память в сравнении с глобальной памятью
Память человека в любое конкретное время может иметь дело только с ограниченным количеством понятий. Для программистов это подразумевает то, что
с ростом количества манипулируемых и запоминаемых элементов растет и количество сделанных ошибок. При использовании локальной памяти для подпрограмм
программист уменьшает количество элементов данных, которое должно быть запомнено. Чем иметь дело с областями данных, содержащими сотни переменных,
программист может теперь иметь дело с областями данных, содержащими небольшое количество данных. Может существовать небольшое количество "узких"
областей данных, каждая из которых может быть проверена программой, использующей ее, потому что каждая область безопасна только тогда, когда есть
уверенность, что другие программы не связаны с ней. Любой из представленных способов для повторно-входимых программ служит для распределения временной
локальной памяти данных.
Глобальные области данных, также известные как общие области, могут быть разбиты на модули. В этом случае вместо одной монолитной области данных
создается некоторое количество узких областей данных. После этого подпрограммы будут иметь дело только с такими участками глобальных данных, которые
требуются для обработки. Это накладывает на часть программистов требование быть внимательными и осторожными с директивами ASSUME в содержимом регистров
сегмента, но такая явная обработка общих данных к тому же делается чище, чем доступ и затем изменение критических данных. Например, общая область
данных, содержащая строки текста и символьные константы, не нуждается в части подпрограмм вычисления чисел, также как таблицы значений синуса и косинуса
не нужны подпрограмме ввода информации с терминала.
В стек должно передаваться столько параметров, сколько необходимо для уменьшения количества внутренних обращений к данным. Всякий раз, когда
несколько программ должны иметь доступ к областям данных с целью передачи параметров, вероятность ошибки увеличивается.
Общие данные обычно должны быть определены с помощью директивы DEFINE DATA (определить данные) так, чтобы содержимое области оставалось без изменения
и не было субъектом случайного удаления при ошибочном освобождении программой с помощью функции "Освободить распределенную память".
|
|