Главная » Просмотр файлов » Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)

Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 79

Файл №1160801 Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)) 79 страницаТ. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801) страница 792019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 79)

Определение подпрограммы служит <иаблоы<>л< лля создания актннаций но время вынолнения программы. 280 Глава О. Инкапсуляция Важно понимать различие между определением и активацией подпрограммы. Определение подпрограммы — это то, что присутствует в тексте программы и является единственной доступной информацией во время трансляции (~апример, во время трансляции известен тип переменных подпрограммы, но нет никакой информации об их значениях или местоположении в памяти (г-значение или Рзначение)).

Активации подпрограмм существуют только во время выполнения программы, При этом может быть выполнен код для доступа к г-значению или 1-значению переменной, но тип переменной может быть недоступен, если только транслятор не сохранил эту информацию в дескрипторе переменной. Это различие очень похоже на различие между определением типа и объектом данных этого типа, которое рассматривается более подробно в следующем разделе. Определенно тина используется как шаблон для определения размера и структуры обьектов данных этого тина Однако сами объекты данных обычно создаются во время выполнения программы либо на входе в подпрограмму, либо при выполнении операции создания обьсктов данных, такой, например, как кэ11ос.

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

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

Реализация определения и вызова подпрограммы Рассмотрим определение подпрограммы в языке С (листинг 6.1). В нем определены все компоненты, необходимые для активации подпрограммы во время выполнения. 1. Первая строка — строка сигнатуры функции Гй — предоставляет информацию о необходимой памяти для ее париметров (обьекты данных х и у) и для ее вычисляемого значения (объект данных типа 11оа1).

2. Объявления определяют способ представления в памяти локальных иеремевных (массив г1 н переменная М). 3, Определяется представление в памяти литералов и именованньи констаиьн ~втуз! — это именованная константа со значением 2, 1~оа1на1 — именованная константа со значением 10, а 10 и 20 являются литералами.

4. Определяется объем памяти для иеполняелюго кода, который генерируется при трансляции операторов, содержащихся в теле подпрограммы. 6,3. Инкапсуляция при помощи подпрограмм 281 Сегмент кода для подпрограммы ЕМ Запись активации для подпрограммы ЕИ (ааалон) Рно. 6.

1 1. Структура активации подпрограммы Листинг 6.1. Определение подпрограммы в языке С Г1оат ГИ(ноас Х, хпт У) 1сопвт хпхтча1 = 2; 00ег~пе Гхпа1ча) 10 Г1оа( М(101. ~пт И, И - хпхтча1, ~Г(И<г~па)ча1) С ) гетпгп(20 * Х + М(И));) Отметим одну важную особешнхсть языка С. Атрибут сопье информирует компилятор языка С о том, что объект да(шых (ш1ча1 — зто числовая константа со значением 2. Тогда как конструкция ФйеГ1 пе Г1 па1на1 10 является макрокомандой препроцессора, которая преобразует каждый встретившийся в тексте программы идентификатор Г(пз1ча1 в симнол 10.

Таким образом, компилятор языка С даже не сталкивается с идентификатором Г1па1ча1, так как везде он булет заменен на числовой ли~врал 10. Практический эффект для выполнения подпрограммы одинаков в обоих случаях, но смысл конструкций сопа1 и ()()еГтпе совершенно различен.

У объекта данных (шгна1 имеется рзначение, чье гзначение равно 2. У объекта й па1ча1 имеется только г-значение, равное 10. Определение подпрограммы позволяет ешс во время трансляции организовать представление в памяти всех используемых объектов данных и определить исполняемый код.

Результатом трансляции будет шаблон, который используется для создания активации каждый раз нри вызове подпрограммы. На рис. 6.11 показано, как определение подпрограммы преобразуется в шаблон, используемый во время выполнения подпрограммы. 282 Глава б. Инкапсуляция Для конструирования конкретной активации подпрограммы иа основе се шаолона следует скопировать весь этот шаблон в нову>о область памяти. Однако вместо того, чтобы делать полную копию, горазло лучше разбить шаблон иа две части; + статическую часть, которая называется сегментом коди и состоит из констант и выполняемого кола. Эта часть це изменяется в процессе выполнения подпрограммы и, следовательно, может быть использована повторно для других активаций; + динамическую часть, которая называется записью активации и состоит из параыетров, результатов функций и локальных данных, а также дру> их вспомогательных данных, зависящих от реализации языка (папример, временных областей памяти, точек возврата из полпрограммы и связей для ссылок на нелокальпыс переменные — более подробно эта тема обсуждается в разделе 9.2).

Структура этой части также одинакова лля вгсх активац>ш лапцой подпрограммы, ио коикретцыс значения данных различаются. Следовательпо, лля каждой активации обязательно требуется своя запись активации. Итоговая структура во время выполнения полпрограмм ы показана ии рис. 6.12. Во время выполнения программы лля кажлой подпрограммы в памяти хранится один сегмент кода. Записи активации динамически создаются при обращении к подпрограмме и уш>что>каются каждый раз при завсршспи сс выполнения. Размер и структура записи активации, как правило, могут быть определены во время трансляции (например, компилятор или транслятор может определяю количество компонентов, пеобхолпмос лля храпения пеобхолимой информации внутри записи активации, а также местоположение каждого компопспта).

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

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

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

По 6.3. Инкапсуляция при помощи подпрограмм 283 завершении выполнения подпрограммы требуется осуществить аналогичный ряд вспомогательных действий, связанных с возвращением результатов и освобождением выделенной области памяти под запись активации. Этот эпилог состоит из набора инструкций, вставляемого транслятором в конец выполняемого кода подпрограммы. Подробности мы рассмотрим позже в этой главе. минвмичвская память Статическая память Последовательные вызовы подпрограммы РМ Сегмент кода для подпрограммы гМ Рис.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6392
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее