лекции (2009), страница 3

2019-09-19СтудИзба

Описание файла

Текстовый-файл из архива "лекции (2009)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр 3 страницы текстового-файла онлайн

• Метка

Указатели

Пробле

мы

строгих

и

нестрог

их

указател

ей:

• Уд

аление

памяти

(Dispose

(p : PT))

не в

своё

время,

что

приводи

т к появлению «висячих ссылок» - указателей, которые должны на что-то указывать, но не указывают.

• Накопление мусора – памяти, на которую не указывает ни один указатель.

P,P1 : PT;

New( P );

New( P2 );

P := P2; {порождение мусора}

Dispose(P2); {P – «висячая ссылка», попытка обращения к памяти, которую она занимает, приведёт к ошибке}

Различают системы с динамической сборкой мусора и без таковой.

Строгий язык с динамической сборкой мусора довольно надёжен.

От висячих ссылок защиты нет

Ада

В чистой Аде есть только new(p). В модуле STANDARD есть UNCHECKED_DEALLOCATION(p) – подчёркивается

небезопасность этой операции

Примеры ошибок:

T *p;

Строгие

Стандартный Паскаль, Модула-2, Ада, Оберон

(со сборкой)

Pascal

Type PT = ^T;

{Modula-2

Type PT = pointer to T;}

var

i :T;

Инициализировать указатель можно только

двумя способами – либо другим указателем,

либо выделением новой памяти NEW(p : PT);

Поэтому все данные чётко разделяются на

именованные, либо не именованные.

Указатель служит для работы с анонимными

данными в динамической памяти.

Смысл – избежание части ошибок

Не строгие

C, C++, Turbo Pascal

Можно получать адрес любого объекта с

помощью операции взятия адреса «&»

Существует абстрактный указатель «void *»

T * => void * автоматически

void * к T * автоматически не приводится

T * p;

void *pp;

pp = p;

p = (T *)pp;

Void f()

{

T x;

P = &x; //!!!адрес локальной переменной!!!

}

void Foo()

{

f();

free(p); //!!!попытка освобождения невыделенной памяти!!! – выдастся ошибка

}

new(p1);

p := p1;

Dispose(p1); {р «висит»}

Для Java, C# - указатели трансформировались в ссылки

Несколько слов о языке Small Talk

Последовательность действий при вычислении значения выражения «2+2»:

1.

Посылка сообщения «+» обекту 2 с параметром 3

2.

В классе integer ищется по таблице методов доступа обработчик сообщения «+» и вызывается

3.

Обработчик отрабатывает и возвращает новый объект «5»

Лекция. Ульянов А.В.

Указатели.

В чем опасность использования: низкоуровневое программирование.

Если используется динамическая сборка мусора, тогда проще.

Так процедура UNCHECKED_DEALLOCATION(P) является аналогом delete(p), dispose(p) в ЯП, где используется

динамическая сборка мусора.

C#, Java - понятие указателя отсутствует (точнее в C# такое понятие есть, но только в небезопасных блоках

unsafe)

managed – управляемый код.

Функции .net не дают все возможности по использованию ресурсов ОС, отсюда приходится обращаться к

возможностям Win API.

unsafe – код, где появляются новые конструкции, С RTL (как будто внутри языка С).

Обращаться к ним можно тоже только из unsafe. Функции, использующие это, тоже помечены как unsafe.

unsafe {…}

byte []b можно объявить как byte *b и использовать в вышеуказанном блоке.

Как работает динамическая сборка мусора:

Менеджер динамической сборки мусора запрашивает память, ее дают, а как только заканчивается, работает

динамический сборщик мусора. Он-то и находит все неиспользуемые куски памяти, сводит к одному блоку.

Именно поэтому ссылка на byte может плавать и нельзя рассчитывать на то, что ее адрес будет постоянным.

Потому преобразование byte[] в byte * возможно только блоке (ссылка замораживается):

fixed (byte* pb = b) {…}

C#, Java – понятие указателя исчезло и превратилось в понятие ссылки.

Типы значения,

Референциальные ТД (классы, массивы, интерфейсы) – к ним обращение только по ссылке.

X a; // Если в C#, Java – то объект является ссылкой и пока не существует.

a = new X(); //Вызов конструктора обязателен.

string[] a;

string[] b = new string[N];

a = b; // Присваивание ссылок, а не копирование.

Понятие указателя в Ада 95(83).

Ада 83:

PT – указатель на тип T.

type PT is access T;

x: PT;

x := new T;

y: T; - Получить адрес у стандартными средствами нельзя.

Ада 95:

Если: type PT is access T;

То инициализация возможна только так:

x: PT;

x := new T;

Если же: type PTT is access all T; (на все объекты типа Т)

xx: PTT;

xx := new T;

Однако можно ссылаться и на другие переменные:

z: aliased T;

zz: T;

z ’access – операция взятия адреса.

x := z’access; - нельзя, т.к. без aliased.

xx := z’access; -можно.

xx := x; - можно.

x := xx; - нельзя.

В современных ЯП ссылки – это средства доступа к объекту.

В C#, Java, Delphi – имеются референциальные ТД.

“имена” = ссылки.

В С++ добавили отдельный базисный тип - ссылочный.

С точки зрения операций:

Чем различаются ссылка и указатель:

*(в С), ^ (M-2, P)

:= только к ссылкам разъименование объекта (и выполняется компилятором).

. – компилятор вставляет разъименование сам.

T is record

A: T1;

B: T2;

end record

type PT is access T;

X: Pt;

X.A; X.B; //разъименование делается компилятором.

X.all; // явное разъименование.

В С++ к ссылкам применяется единственная операция – инициализация (путем присваивания ссылки

внешнему объекту, по сути ссылка инициализируется адресом объекта).

X& t = a; // все, что можно делать с а, можно делать и с t.

X* pa = new X();

X& t = *pa;

&t == значению указателя pa.

delete(&t);

Если f(X&t) – тогда инициализируется в момент вызова функции.

Глава 3. Составные ТД.

П.3.1. Массивы.

Последовательность однотипных элементов.

D x … x Dn

A[i] – операция индексирования. i – индексное выражение.

Атрибуты массива:

1)

Базовый тип (тип элементов) – D

2)

Тип индекса (i)

3)

Диапазон индекса (длина)

В разных ЯП:

Связывание базового типа статически (везде).

Тип индекса – С/С++/С#/Java/Оберон – всегда тип int (статическое связывание).

Фиксируется нижняя граница значения индекса.

Длина – статическая и динамическая.

Динамическая – чисто-динамическая(можно изменить в любое время) и квазистатическая(значение

получено динамически, но изменять нельзя).

Массив всегда непрерывная последовательность байтов. Отсюда возникает проблема распределения памяти.

Можно длину сделать статической (жестко), оттого сделали квазистатической.

T[] a = new T[N]; //0..N-1

P,i,L..R(диапазон)

Стандартный Pascal:

Function SCAL( A,B: Arr): real;

Если диапазон для Arr от 1..N, то для массива от 0..N-1 работать будет не корректно(или вовсе не будет

работать).

A[i] – компилятор выполняет квазистатический контроль. (не очень-то гибко)

Модула-2:

Объекты данных массива (переменные). Формальные параметры массива (открытые массивы).

Понятие открытого массива: зафиксирован базовый тип.

Обычный массив:

TYPE Arr = ARRAY Index of D;

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