Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_tyap (1).doc
Скачиваний:
23
Добавлен:
17.04.2019
Размер:
1.05 Mб
Скачать

24. Стековое управление памятью.

Простейший метод управления памятью. В начале выполнения свободная память представляет собой блок из последовательных слов памяти. При запросе памяти выделяется область, состоящая из последовательных ячеек этого стека, начинающаяся с одного конца. Память должна освобождаться в порядке, обратном запросам так, что блок освобожденной памяти всегда лежит на вершине стека. Задачи утилизации, уплотнения и повторного использования при такой организации становятся тривиальными. Ед. указатель стека – все, что требуется для управления памятью. Указатель стека всегда указывает на очередное свободное слово в памяти, т.е. на текущую вершину стека.

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

Многие элементы программы и данные, требующие памяти, связаны с активацией подпрограмм. Часто оказывается, что стековую память можно использовать как для точек возврата из подпрограмм, так и для таблиц локальной среды подпрограмм. Кроме того, выделение памяти для временных переменных, используемых для вычисления выражений и передачи параметров, так же может быть связано с активацией подпрограмм. Обычно транслятор может определить число временных переменных, требуемых для каждой активации подпрограмм. При выполнении программы память для временных переменных можно выделить в стеке в момент инициирования каждой новой активации подпрограмм и освобождать ее по завершению активации. Большое значение также ограничение, которое состоит в том, то структуры данных могут создаваться программистом только при входе подпрограмм и должны обязательно уничтожаться при выходе. Такая организация памяти позволяет использовать стековое распределение памяти и для структур данных, определяемых программистом. Обычно все элементы, связанные с одной активацией подпрограммы и требующие памяти в стеке, группируются в единую активационную запись. При вызове подпрограммы на вершине стека создается новая активационная запись, которая удаляется при завершении подпрограммы.

25. Статическое управление памятью.

Простейший способ распределения памяти – статическое распределение. То есть распределение памяти, при трансляции, остающееся неизменным в ходе выполнения.

Статически обычно распределяется память для пользовательских и системных программ, а так же для буфера ввода – вывода и различных системных данных. Статическое распределение не требует во время выполнения никаких программных средств управления памятью и при этом отпадают вопросы утилизации памяти и повторного ее распределения, например, в фортране вся память распределена статически и каждая программа компилируется отдельно от остальных, при этом компилятор создает блок памяти, содержащий скомпилированную программу, ее область данных, временные переменные, позиции для точки возврата, а также области системных данных.

Программа – загрузчик выделяет пространство в памяти для этих скомпилированных блоков. В процессе выполнения программы не происходит никакого управления памятью. Статическое распределение памяти эффективно, т.к. на управление памятью во время выполнения не тратится ни времени, ни памяти, но этот метод несовместим с рекурсивными вызовами подпрограмм, со структурами данных, размер которых зависит от вычисляемой или вводимой информации и со многими другими желательными возможностями языка.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]