Cтраница 1
Статическое распределение памяти эффективо, поскольку на управление памятью во время выполнения не тратится ни времени, ни памяти. Однако этот метод несовместим с рекурсивными вызовами подпрограмм, со структурами данных, размер которых зависит от вычисляемой или вводимой информации, и со многими другими желательными возможностями языка. Читатель, однако, не должен упускать из вида важность статического метода распределения памяти - для многих программ вполне достаточно статического распределения. Два широко используемых языка программирования, Фортран и Кобол, сконструированы в расчете исключительно на статическое распределение памяти. [1]
Статическое распределение памяти состоит в назначении адресов для размещения данных в процессе трансляции. Адреса могут затем корректироваться при загрузке программы, но в процессе исполнения объектной программы остаются неизменными. [2]
Статическое распределение памяти целесообразно проводить в два этапа. На первом этапе выделяется секция памяти каждому блоку, а на втором - назначаются адреса переменным внутри блока. [3]
Блочная структура программы. [4] |
Однако статическое распределение памяти возможно лишь в тех случаях, когда количество данных, описанных в блоке, не меняется при повторных входах в блок. [5]
Недостатком статического распределения памяти является неэкономное использование памяти, а преимуществом - экономия машинного времени при исполнении объектной программы. В случаях, когда данные не удается разместить в оперативной памяти, это преимущество сводится на нет дополнительными затратами времени на обмен с внешней памятью. В таких случаях динамическое распределение памяти может оказаться более выгодным с точки зрения общих затрат машинного времени. [6]
При статическом распределении памяти все данные, описанные в блоке, можно расположить в области памяти, выделенной Аля этого блока. Однако на практике массивы обычно размещают ь отдельном поле массивов. Это связано с тем, что массивы иногда приходится выносить во внешнюю память. [7]
Дерево описания массивов. [8] |
При статическом распределении памяти для простых переменных массивы, как уже отмечалось, размещаются в отдельной области памяти, а при динамическом распределении памяти - в той же области памяти, где простые переменные. На рис. 4.44 показан фрагмент таблицы идентификаторов и возможный вариант распределения секции стека для массивов. [9]
При статическом распределении памяти размещение массивов информации происходит до начала вычислительного процесса и не изменяется до его конца. Исполнительный адрес операндов указывается либо прямым ( действительным) адресом в команде, либо суммой прямого адреса и индекса, по которому выполняется модификация адресной части команды. Статическое распределение памяти малоэффективно: заранее необходимо выделять большие области памяти из расчета на максимальную длину переменных массивов. Кроме того, такое распределение очень неудобно при многопрограммной работе, когда памятью могут одновременно пользоваться несколько программистов. [10]
В отличие от статического распределения памяти записи этой таблицы, указывающие количество машинных слов, fii для размещения данных блока i, приходится корректировать, ( вычислять заново) в ходе исполнения программы при каждом входе в блок L Для этого в объектную программу нужно включить команды, вычисляющие величину tii перед каждым исполнением подпрограммы ВХОД. [11]
Несмотря на то что загрузчик кросс-аистемы производит статическое распределение памяти, действия его нельзя считать тривиальными, что объясняется сложным распределением памяти под области с различным функциональным назначением. Известно что для повышения надежности выполнения операций пересылок в формат команды вводят дополнительные, так называемые контрольные разряды. Вычисление этих разрядов в различных специализированных ЭВМ производится, как правило, по разным алгоритмам, что превращает соответствующие программы загрузчика в машинно-зависимые. [12]
Практически во всех реализациях Фортрана используется механизм статического распределения памяти. Этот факт часто используется программистами. [13]
Однако в автокоде нет средств для динамического распределения памяти ( т.е. в процессе выполнения программы), так что эту проблему приходится решать на основе статического распределения памяти. В связи с этим мы рассмотрим несколько вариантов программы, в которых указанная проблема решается по-разному. [14]
Пример блочной структуры. [15] |