Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
68
Добавлен:
30.04.2013
Размер:
328.19 Кб
Скачать

25) Распределение оп при выполнении программ.

Существуют две стратегии распределения оперативной памяти, как и любого ресурса: статическое и динамическое распределение.

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

При динамическом распределении памяти каждой программе в начальный момент выделяется лишь часть от всей необходимой ей памяти, а остальная часть выделяется по мере возникновения реальной потребности в ней. Такой подход базируется на следующих предпосылках: 1) при каждом конкретном исполнении в зависимости от исходных данных некоторые части программы вообще не используются. Следует стремиться к тому, чтобы эти фрагменты кода не загружались в ОП. 2)Исполнение программы характеризуется так называемым принципом локальности ссылок. Он подразумевает, что при исполнении программы в течение некоторого относительно малого интервала времени происходит обращение к памяти в пределах ограниченного диапазона адресов. Следовательно, на протяжении этого времени нет необходимости хранить в ОП другие блоки программы. При этом системные средства должны отслеживать возникновение требований на обращение к тем частям программы, которые в данный момент отсутствуют в ОЗУ, выделять этой программе необходимый блок памяти и помещать туда из внешнего ЗУ требуемую часть программы. Для этого может потребоваться предварительное перемещение некоторых блоков информации из ОЗУ во внешнюю память. Данные перемещения должны быть скрыты от пользователя и в наименьшей степени замедлять работу его программы.

Время жизни бывает 3-х видов: статическое, локальное и динамическое.

Объекты со статической продолжительностью жизни получают распределение памяти сразу же при начале выполнения программы; такое распределение памяти сохраняется до выхода из программы. Объекты со статической продолжительностью обычно размещаются в фиксированных сегментах данных, распределенных в соответствии с используемой моделью памяти. Все функции, независимо от того, где они определены, являются объектами со статической продолжительностью. Также статическую продолжительность имеют все переменные с файловым контекстом. Прочим переменным может быть задана статическая продолжительность, если использовать явные спецификаторы класса памяти static или extern.

Объект с локальной продолжительностью всегда имеет локальный контекст, поскольку он не существует вне своего объемлющего блока. Объекты с локальной продолжительностью жизни, иначе называемые динамическими локальными переменными, менее надежны. Они создаются в стеке (или в регистре) при входе в объемлющий их блок или функцию. При выходе программы из такого блока или функции они уничтожаются. Объекты с локальной продолжительностью должны быть инициализированы явно; в противном случае их исходное содержимое непредсказуемо. Объекты с локальной продолжительностью всегда должны иметь локальный контекст или контекст функции. При объявлении переменных локальной продолжительности можно использовать спецификатор класса памяти auto, однако он является избыточным, поскольку auto для переменных, объявленных в блоке, всегда является умолчанием.

Объекты с динамической продолжительностью жизни создаются и разрушаются конкретными вызовами функций при выполнении программы. Им распределяется память из специального резерва памяти, называемого кучей, при помощи либо стандартных библиотечных функций, как например malloc, либо при помощи операции С++ new. Соответствующая отмена распределения выполняется при помощи free или delete.

Соседние файлы в папке Материал