<<
>>

Управление подпрограммами в языке С

Язык С спроектирован таким образом, что в записях активации достаточно только связи управления. Связи доступа здесь не нужны, так как запрещено вложение подпрограмм друг в друга. Доступ к объявлению имени здесь возможен или из самой подпрограммы, или из программы вне всех подпрограмм.
Таким образом, здесь имеются только две категории объявлений данных:

? глобальные объявления, они доступны всем подпрограммам;

? локальные объявления, которые доступны лишь одной-единственной подпрограмме.

Схема распределения памяти для работающей С-программы представлена на рис. 14.11.

Рис. 14.11. Распределение памяти для программ на языке С

390

Глава 14.
Управление подпрограммами

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

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

Переменные в несвязанных блоках могут разделять одну и ту же память стека, так как они никогда не появляются одновременно.

Формат записи активации в С показан на рис. 14.12.

Рис. 14.12. Формат записи активации подпрограммы на языке С

Поле для сохраняемой информации состояния включает связь управления, которая указывает на запись активации вызывающего модуля. Необходимость связи управления обусловлена организацией стека — размер записи активации изменяется (от подпрограммы к подпрограмме). Для подпрограммы Р все записи активации имеют одинаковый размер. Размер записей активации другой процедуры Q зависит от кода для Q и в общем случае отличен от размера для Р.

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

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

Управление подпрограммами в языке Pascal

391

1. Язык С использует передачу параметров по значению. Поэтому вызывающий модуль вычисляет фактические параметры оператора вызова и размещает их значения в записи активации вызываемого модуля. При вызове 1(п - 1) переменная п локальна для вызывающего модуля, поэтому вычисление фактического параметра п - 1 — это обязанность вызывающего модуля.

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

3. Вызываемый модуль выделяет место под свои локальные переменные. Резервируется временная память под промежуточные результаты для вычисления выражения. Выражение (а + Ь) * с реализуется следующей последовательностью операторов:

11 := а + Ь; 12 : = И * с; где И и 12 — имена, генерируемые компилятором. Значения переменных с такими именами сохраняются во временной памяти.

4. Выполняется тело вызываемого модуля. В ходе этого выполнения возможны дополнительные активации. Для вызова, который может произойти в ходе активации, используется разделяемое поле для выходных параметров. Эти выходные параметры становятся для следующего модуля входными параметрами. Размер поля для вызова Р(х, у) отличается от размера для вызова Q( ).

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

указатель фрейма + смещение

где смещение вычисляется в период компиляции.

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

<< | >>

Еще по теме Управление подпрограммами в языке С:

  1. О языке и методе
  2. Установки — на естественном языке внутренней речи.
  3. Установки — на естественном языке внутренней речи.
  4. Формулировать задание внутренней природе организма следует на языке души
  5. Разминка антистрессовая, приемы и спецприемы, целевые установки — на естественном языке «внутренней речи».
  6. Разминка антистрессовая, приемы и спецприемы, целевые установки — на естественном языке «внутренней речи».
  7. Статья 1040. Обращение взыскания на имущество, переданное в управление, по требованию кредитора установщика управления
  8. § 3. Право управления предприятием как особый вид абсолютных прав. Право полного и ограниченного управления (п. 1774-1776)
  9. УПРАВЛЕНИЕ ВРЕМЕНЕМ VERSUS УПРАВЛЕНИЕ СОБОЙ
  10. § 4. Правопреемство как следствие приобретения права управления предприятием. Условия отчуждения и приобретения права управления предприятием (п. 1777-1782)
  11. Управление термами
  12. Управление деканатами
  13. Статья 1029. Договор управления имуществом
  14. Управление градусами
  15. Функции управления в организации.
  16. Статья 97. Управление обществом
  17. Поведенческая основа процесса управления.
  18. ПСИХОЛОГИЯ УПРАВЛЕНИЯ