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

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

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

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

! (мя массива без индексов интерпретируется как указатель. за исключением того. что оно представляет собой константу, и, следовательно. ему не могут присваиваться значения. Рассмотрим следующие обьявления: Лпв 11эс [10]; лпк +рггг Рассмотрим инициалнзируюшее присваивание рсг = 115Г; Здесь адрес элемента 11эг [0] присваивается переменной ргг, поскольку, как уке говорилось, имя массива без ннлекса интерпретируется как базовый адрес массива. Рас;иотрев данное прнсваивание, мы можем прийти к выводу, что *(рсг + 1) эквивалентно 11з [1], *(ргг + 1пс]ех) эквивалентно 11вг[1пс(ех] и рсг[1пс[ех]эквивалентно 11эг[1пбех] )!з этих выражений понятно, что операции над указателями солержат то же масштабирование, которое используется в операциях индексации.

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

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

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

5.10.У. Указатели в языке УОВТВАМ 90 Указатели в языке РОКТКАН 90 используются для указания на динамические и статические переменные. Например, в объявлении 1ЫТЕЯЕК, Р01)(ТЕК:: 1)ЧТ РТК 1ИТЕОЕК, Р01)ЧТЕК, 01МЕ)(Я10Ы (: ]:: 1ИТ ) 1ЯТ РТР. 261 5Л О. Указатели указатель ' ЕТ РТК ~о~~~ с~младо~ на люоую величину типа 1НТЕСЕК, а указа~ель ТЕ1 ЕТДТ РТК вЂ” на любой одномерный массив, состояший из элементов типа К К Указатели в языке РОКТКАХ 90 обычно разыменовываются неявно.

Если, например, указатель появляется в обычном выражении, то он всегда является неявно разыменованным. Если разыменование нежелательно, то используется специальная форма оператора присваивания каза=ель =ь ~ель Такое присвоение используется как для задания конкретной переменной в качестве переменной. на которую ссылается данный указатель, так и для присвоения указателям адресов лр>пгх указателей.

Любая переменная, которую планируется адресовать с помошы >казазеля. должна содержать атрибут ТАКАЕТ, устанавливаемый прн объявлении переменной. Допустим. объявление было выполнено следуюшим образом: ЕТЕСЕ., ТАКСЕТ :: АРРЕЕ ТИ ЕСЕК СчАКСЕ При этом на переменную АРРЕЕ указатель 1ЧТ РТК ссылаться может, а на переменную СКА" .СŠ— нет. Указатели в языке РОКТКАХ 90 легко могут становиться висячими, поскольку оператор Ей'.,' ССАТЕ, принимаюший указатель как аргумент, и не попытается определить, указывают ли еше какие-либо указатели на удаляемую из памяти динамическую переменную. 5.10.8. Ссылки В языке С' сушествует один особый тип переменных, носяших название ссылок, которые используются исключительно для описания формальных параметров функций.

Переменная. являюшаяся ссылкой в языке С++, представляет собой константу, которая всегда разыменовывается неявно. Поскольку ссылка в языке С~+ является константой, то во время своего определения она должна инициализироваться адресом некоторой переменной. а после инициализации данная ссылка уже не сможет быть связанной ни с одной другой переменной. Последнее очевидно: неявное разыменование препятствует присвоению ссылке нового адреса.

Узнать ссылки в описаниях можно по знаку ь, с которого всегда начинаются их имена. Рассмотрим следуюший фрагмент программы: Епс геац1г = 0; Епе ьгеТ гевц1г = гевц1гг ген гевц>в = 100; В нем переменные гевц1г и геб гевц1г имеют совмешенные имена. Если при описании функциЯ в качестве формальных параметров используются ссылки, то они обеспечивают двустороннюю связь между вызываюшей и вызываемой функциями. Для параметров, которые не являются ни ссылками, ни указателями, это было бы совершенно невозможно, поскольку параметры в языке С++ передаются по значению.

Передача указателя как параметра также обеспечивает двустороннюю связь, но при этом приходится выполнять явное разыменование формальных параметров, что делает про- 262 Глава 5. Типы данных зчм) менее читабельной и менее надежной. К ссылкам вызываемая функпия обраша.;я гочно так же, как и к другим параметрам. Вызываюшая функпия не лоджия как-то . денно вылелять тот факт, что формальные параметры, соответствуюшие фактическим ..гзметрам, являются ссылками. Ссылкам компилятор передает алреса.

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

что сразу же делает бессмысленными арифмез ические опера. н над ссылками. С другой стороны. при эзоп не запрешается операпия присваивания. :ьич образом, в отличие от ссылок в языке С' . с помошью ссы.юк в языке )аьа можно зшаться к экземплярам разных классов. Обрашення ко всем экземплярам классов в -.ыке )ата выполняются с помошью ссылок. Это. фактически. и является единственным .лользованием ссылок в языке )ата. Подробнее все эти вопросы описаны в главе !1. :смотрим следуюший пример, в котором Бг гдпо — станлартный класс языка )ака: =тк1по асг1; з=г1 = "Это строковый литерал языка 7ача"; ~том фрагменте программы переменная з г1 определяется как ссылка на экземпляр гн обьект класса Ягг1гй, но изначально ее значение устанавливается равным нулю.

В - зэльтате следуюшего присвоения переменная всг1 начинает ссылаться на строку . го строковый литерал языка )ака", являюшуюся объелтом Яс" 1пгоь Поскольлу экземпляры классов в языке Зава удаляются из памяти неявно (явного опе- ~ора улаления не сушествует). висячая ссылка в этом языке возникнуть не может. 5 10.9. Оценка Проблемы висячих указателей и мусора описана довольно полробно. Проблема .

правления динамической памятью еше будет рассматриваться в разделе 5.10. ! 0.3. Указатели часто сравнивают с оператором осто. Этот оператор расширил область лераторов, которые могли выполняться на следующем этапе программы. Указатели -зсширилн область ячеек памяти, на которые могли ссылаться переменные. Самым не. =обрительиым образом, вероятнее всего, к указателям отнесся Хоар (Ноаге, 1973), скавший: "Их введение в высокоуровневые языки было шагом назад, от которого мы нигда не оправимся'. Ссылки в языке 1ача обеспечивают некоторую гибкость и возможности указателей.

не чея при этом нелостатков, присуших указателям. Создается впечатление, что програм':исты согласны обменять всю мошь указателей языков С и С+а на значительно более высокую належность ссылок языка )ача. 5.10.10. Реализация ссылок и указателей В большинстве языков указатели используются для управления динамической памятью. То же самое справедливо и для ссылок языка Зача. По этой причине мы не можем рассматривать эти свойства раздельно, поэтому вначале кратко опишем принципы пред- 5.10. Указатели ставления указателей н ссылок. после чего обсудим возможные решения проблемы висячих указателей, а в заключение опишем основные проблемы, связанные с методами управления кучей. 5. 10.

10. 1. Представления указателей и ссылок В большинстве больших компьютеров указатели и ссылки являются просто значениями. содержащимися в двух- или четырехбайтовых ячейках памяти, в зависимости от размера адресного пространства машины. Впрочем, существуют еше и микрокомпьютеры. большинство из которых основано на милропроцессорах!пге1, использующих адреса, состоягцие из лвух частей: сегмента н смешения.

Таким образом, указатели и ссылки в этих системах представляются в виде пары 16-битовых слов. в каждом из которых содержи ся одна из двух частей адреса. 5. 10. 10.2. Решение проблемы висячих указателем К висячим указателям относят те. которые указывают на уже освобожденную память. Зачастую они создаются в результате явного удаления динамических переменных из памяти; оператор удаления из памяти называет только олин указатель на динамичеслую переменную, подлежащую удалению.

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

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

На рис. 5.12 показано различие реализации динамических переменных с испольюванием метода над~ рабий и без него. Надгробия являются неэффективным методом с точки зрения затрат времени и памяти. Поскольку надгробия никогда не удаляются из памяти, то занимаемую ими память никогла нельзя использовать повторно. Каждый доступ к линамической переменной через надгробие требует дополнительного уровня косвенной адресации, что в большинстве компьютеров требует дополнительного машинного цикла. По-видимому, разработчики всех распространенных языков программирования решили. что повышение безопасности не стоит дополнительных затрат, вслелствие чего ни в одном широко известном языке надгробия не используются.

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

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

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

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