Контрольные вопросы и упражнения
X: integer := 50;
которое инициализирует переменную X, присваивая ей значение 50.
Объясните два значения, которые может иметь эта инициализация в случаях:■ если локальные переменные сохраняются в промежутках между обращениями к подпрограмме;
■ если локальные переменные уничтожаются между вызовами подпрограмм.
398 |
Глава 14. Управление подпрограммами |
2. В языках Pascal и Ada допускается использовать указатели совместно с операцией new для создания новых объектов данных. Их применение приводит к генерации мусора во время выполнения программы. Объясните, в чем состоит причина этого явления и как минимизировать такую генерацию. 3. Возьмите какую-либо написанную вами программу на языке, который использует правила статической области видимости, и для каждой содержащейся в ней подпрограммы перечислите имена, входящие в ее среду: ■ локальных ссылок; ■ нелокальных ссылок; ■ глобальных ссылок и ■ предопределенных ссылок. Затем решите обратную задачу: для имени, объявленного в каждой из этих сред ссылок, перечислите: ■ объявления подпрограмм в его статической области видимости; ■ активации подпрограмм в его динамической области видимости. 4. Рассмотрим следующую программу, написанную на языке, в котором используются правила статической области видимости:
Заполните следующую таблицу для каждого оператора writeln в предположении, что передача параметров осуществляется указанным способом. |
Способ передачи параметров______________________ |____ ]____ к____ т Язык Pascal, как записаны в программе Все параметры передаются по ссылке Все параметры передаются по значению Все параметры передаются по значению-результату |
Контрольные вопросы и упражнения |
399 |
2. Операция выделения памяти malloc языка C часто реализуется как обращение к программе распределения памяти, встроенной в операционную систему. Операционная система организует центральную кучу, используемую всеми программами, а операции malloc и free, вызываемые из С-программы, соответственно выделяют и освобождают память в этой центральной куче. Поскольку операция malloc требует обращения к операционной системе, этот процесс может занять много времени. Альтернативным вариантом реализации операции malloc является использование локальной кучи в адресном пространстве каждой программы. В таком случае использование этой операции обходится значительно дешевле. (Операция new в языке Pascal реализована таким же образом.) Предположим, ваша программа требует достаточно частого использования операции malloc для выделения небольших блоков памяти из кучи. Исследуйте вашу локальную реализацию C и определите, какова в этой реализации стоимость использования для указанных целей операции malloc. |