Главная » Просмотр файлов » Р.У. Себеста - Основные копцепции языков программирования (2001)

Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 69

Файл №1160794 Р.У. Себеста - Основные копцепции языков программирования (2001) (Р.У. Себеста - Основные копцепции языков программирования (2001)) 69 страницаР.У. Себеста - Основные копцепции языков программирования (2001) (1160794) страница 692019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Языки АЕООЕ 68 и РОйТВА1ч 90 от-эсятся к языкам с неявным разыменованием, тогда как в большинстве современных ыыков программирования разыменование происходит только при явном указании. В языке Рааса!. например, разыменование явно задается знаком " как постфиксная унар-ая операция. Допустим, что переменная рсг является указателем со значением 7080, зк это было в приведенном выше примере, а ячейка с адресом 7080 содержит величину : 6. Тогда оператор присваивания := рсг" -рисвоит переменной 7 значение 206. Графически описанный процесс представлен на гис. 5.11.

7000 Безымянная Лннямнчясквя переменная рзг Рис. 5.11. Операция присваивания7 г= рг Если указатель адресует записи, то синтаксическая форма ссылки на поля таких запи:ей изменяется в зависимости от языка. В языках С и С++, например, существует лва ;пособа использования указателя на запись в качестве ссылки на поле этой записи. Если переменная-указатель р указывает на запись, имеющую поле аг7е, то для ссылки на это толе можно испольювать оператор (*р] . аое. Если между указателем на запись и по-ем этой записи помещается оператор ->, то происходит объединение разыменования и ссылки на поле.

Следовательно, выражение р -> аое эквивалентно приведенному выгле выражению (*р1 . аое. В языке Разов! та же ссылка записывается в виде р" . аое, а з языке Ада может использоваться запись р. аое, поскольку в таком случае указатели эззыменовываются неявно. Языки, предусматривающие использование указателей для управления динамической памятью, должны содержать оператор явного размещения переменных в памяти. В нскоорых языках помимо этого оператора предусмотрен еше и оператор явного удаления переменных из памяти. Обе эти операции часто принимают форму встроенных подпрограмм, хотя в языках Ада, С++ и Эата для размещения в памяти используется отдельный оператор.

5.10. Указатели 257 5.10.3. Проблемы, возникающие при использовании указателей Первым высокоуровневым языком, содержащим указатели, был язык Р1Л, в котороч они могли использоваться для обращения не только к динамическим переменным, но и .. другим переменным программы. Указатели в языке РЕЯ крайне гибки, но их использс. ванне может привести к определенным ошибкам при программировании. Некоторые к: проблелк связанных с использованием указателей в языке Р1Л, сохранились и в бол;". поздних языках программирования.

Одним из решений таких проблем в современнь. языках программирования является полная замена указателей ссылками, которые также позволяют производить неявное разыменование. Примером языка, использующего такс подход, может служить язык )ача. Я. 1О.З.1. Висячие указатели Висячим указателем (дапй!!пй ро!пгег), нли висячей ссылкой (дапй!!пй геГегепсе!.

называется указатель, содержащий алрес динамической переменной, уже удаленной из па =. ти. Висячие указатели опасны по нескольким причинам. Во-первых, ячейка памяти. на кторую указывает ссылка, может содержать какую-нибудь новую динамическую переме-. ную. Если тип этой новой переменной отличается от типа старой, то проверка типов .-.=. использовании висячих указатедей становится некорректной. Однако, даже если новая стременная имеет тот же тип, что и старая, ее значение не имеет никакого отношения к эь" чению переменной, удаленной из памяти.

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

1. Целью указателя р1 устанавливается новая динамическая переменная. 2. Указателю р2 присваивается значение указателя р1. 3. Динамическая переменная, являющаяся целью указателя р1, явно удаляется из .— . мяти (значение указателя р1 устанавливается равным нулю), но при выполне-.. этой операции указатель р 2 не меняется и с данного момента становится висяч и ° Я. 10.3.2. Потерянные Лннамические переменные Потерянной динамической переменной (1озг Ьеар4упащ!с чапаЫе) называе-.: размещенная в памяти динамическая переменная, переставшая быть лоступной из г,. -:. зоватедьской программы.

Такие переменные часто называют мусором (ЗагЬайеь - . скольку они уже бесполезны для первоначальных целей, и не могут повторно размец.з-:. ся в памяти для новых целей. Самым распространенным способом создания потеря .-= линамических переменных является следующая последовательность действий. 1. Целью указателя р1 устанавливается вновь созданная динамическая переменнз: 2. Целью указателя р1 устанавливается другая вновь созданная динамическая .-.;: менная. 25В Глава 5. Тины дон~ ~ ~ :;ле выполнения этих действий первая динамическая переменная становится : — 1ной. илн потерянной.

::;лема потерянных линамических переменных, иногда называемая утечкой памяти †: — !еайале). затрагивает языки, в которых требуется явное удаление из памяти дина-:., х переменных. В следующих разделах мы рассмотрим. как разработчики языков : -*.ется с проблемами висячих указателей и потерянных динамических переменных.

5. ) О.Я. Указатели в языке Разса! :;ыке Разек! указатели используются исключительно лля доступа к динамическим з ным переменным. Поскольку в этом языке есть явная операция удаления из па-з а нем легко могут создаваться висячие указатели. Создание программистом ли- г.'нх переменных в языке Разса! выполняется оператором пен, а уничтожение— .-гэом б ' крове. Для безопасного уничтожения динамических переменных функ=-= =зе должна найти все указатели на данную динамическую переменную и при:,.м значения п11. К сожалению, зто процесс сложный и неэффективный и, как : з:е.

резко используется. Данная проблема является общей проблемой языков про-.звания. касающейся всех процессов явного удаления из памяти. —:. укторы языка Рааса! предлагают следующие альтернативы явному удалению °:.орировать команлу озерове, при этом удаление из памяти не происходит и -, олин из указателей, целью которых являлся искомый динамический объект, не счяется.

° -';: включать в язык оператор с(звроае, делая его неразрешенным. ° ззлять нз памяти сомнительные динамические переменные и присваивать указа--.-.:о. являющемуся параметром оператора с(за розе, значение п11, создавая, там образом, из всех указателей, указывающих на объект, висячие указатели. °::ностью и корректно реализовать оператор с((ерове, сделав существование : чих указателей невозможным. (Автору неизвестна ни одна реализация языка '- ы.з!.

в которой была бы выбрана эта альтернатива.) 5. ! !.!.5. Указатели в языке Ада А.)а содержит указатели, называемые типами аооевв, полобные указателям г, . -::;з!. Стоит отметить, что проблема висячих указателей в языке Ада частично ;чет структуры языка. Динамическая переменная может (по желанию разраз 'эезств реализации языка) неявно удаляться из памяти в конце области вилик ших ее указателей, при этом значительно снижается потребность в явном - памяти. Поскольку единственным способом доступа к динамическим пере-"-гяются указатели этого типа, то при достижении конца области видимости того типа уже не остается указателей, указывающих на данный объект. Это :.

- -гоблему висячих указателей, основным источником которой является некор-.: -: юванное явное удаление из памяти. К сожалению, язык Ада также содержит юного удаления из памяти !!ЫСНЕСКЕР (ЗЕАЬЬОСАТ10Л. Его имя (букв. .:.: =. мое ) деление из памяти") должно отговорить пользователя от использования : г ...,"з илн, по крайней мере, предупредить о возможных проблемах.

259 «сзэтелм Проблема потерянных динамических переменных структурой указателей языка Лс ° не устранена. Одним из небольших усовершенствований указателей языка Ада, по сравненин1 . языками Разов! и Моби!а-2, является требование неявной инициализации всех указателе,. значением пи11 (значение нуля в языке Ада). Такой подход предотвращает случайныл лоступ к произвольным ячейкам памяти, происходящий из-за того, что пользователь забыл инициализировать указатель до его использования.

5.10.6. Указатели в языках С и С++ В языках С и С++ указатели могут использоваться так же, как и алреса в языках ассемблера. Это означает, что эти указатели крайне гибки, но должны использоватьс: очень осторожно. Такая структура не предлагает решений проблем висячих указателе;: или потерянных динамических переменных. Тем не менее, тот факт, что в языках С .

С++ разрешены арифметические операции над указателями, делает зти указатели боле. интересными, чем в других языках программирования, В отличие от указателей в языках Разов! и Ада, которые могут указывать только нз ячейки динамической памяти, указатели в языках С и С++ могут ссылаться практичесл . на любую переменную во всей доступной области памяти. Операция разыменования в языках С и С++ задается звездочкой (*), а знак ь у казь:- вает на оператор выборки адреса переменной.

Рассмотрим, например, фрагмент про. граммы япе ргг; зпс соцпг, зпзг; ргг = ьзпзг; соцгш = *ргг; Привеленные в нем лва оператора присваивания эквивалентны одному: соопс = зпзгз Операция присваивания значения переменной рсг. помешает в нее алрес переменной заз с. Первое присваивание переменной сорос разыменовывает указатель ргг, чтобы получить значение переменной Ьпзг, которое затем присваивается переменной со .".. Таким образом, результатом приведенных выше лвух операций присваивания является присваивание значения переменной (пзс переменной соуп . Отметим, что объявление указателя задает тип переменных, которые он может ааресовать.

Указателям могут присваиваться адреса любых объектов, имеющих соответствующий тип. либо нуль, используемый для обозначения нулевою алреса. До некоторой степени в описываемых языках возможна н арифметика указателей. Если, например, рг.г — указатель, объявленный для алресации некоторого обьекта. имеющего определенный тип, то выражение ргг ь зпс(ех допустимо. Семантика этого выражения слелующая: вместо простого сложения величин переменных (пс!ех и рсг, значение переменной зпс)ех сперва увеличивается согласно размеру ячейки памяти (в единицах памяти), на которую указывает переменная рг г. Если, например. переменная рег указывает нв ячейку памяти.

занимаемую типом, имею- Гдово 5. Типы данных 260 шим размер 4 единицы памяти, то переменная Тпс]ех умножается на 4, после чего полученный результат складывается с переменной ргг. Основной целью таких арифметических операций над адресами является управление массивами. Ниже обсуждаются только одномерные массивы. В языках С и С++ все массивы используют в качестве нижней границы диапазона индексов число О, а имя массива без индексов всегда относится к адресу первого элемента.

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

Тип файла
DJVU-файл
Размер
9,5 Mb
Тип материала
Высшее учебное заведение

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

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