Лекция 11 Память, типы














Лекция 11 Память, типы адресации. Указатели. Динамические списки. Память, указатели, адресная арифметика
Память Регистровая Буферная (Cache) Оперативная (ОЗУ -RAM) Постоянная (ПЗУ - ROM) Внешняя Память, указатели, адресная арифметика
Адресация оперативной памяти Минимальная адресуемая единица памяти – байт. 0 1 2 3 4 Aб Aсм Аф Физический адрес Аф – номер байта оперативной памяти. Прямая адресация Адресация по схеме «база+смещение» : Косвенная адресация Аф = Аб + Асм, где Аб – адрес базы – адрес, относительно которого считают остальные адреса; Асм – смещение – расстояние от базового адреса до физического. Указатель – тип данных, используемый для хранения смещений. В памяти занимает 4 байта, адресует сегмент размером V = 232 = 4 Гб. Базовый адрес = адрес сегмента. Память, указатели, адресная арифметика
Память, прямая и косвенная адресация АДРЕС - номер слова памяти для доступа к нему слово int c адрес для с (4) байт 0000 int *p для p (8) 0001 Int c 2 для c 2 (12) 0101 0000000101 0100 1001 0000000100 1000 c=5 5 1101 1100 p=&c p =4 n Указатель - это переменная, которая в качестве *p =5 своего значения содержит адрес байта памяти, по которому находится значение переменной. Память, указатели, адресная арифметика
Память, прямая и косвенная адресация с (0100) p (1000) c 2 (1100) 0000000101 0100 0000000101 0000000100 1000 1100 операция адрес результата c 2=с Команда = адрес с2 адрес операнда адрес результата c 2=*p = адрес *p адрес с2 адреса операнда Память, указатели, адресная арифметика
Указатели в языке ПАСКАЛЬ c 1 integer c 1 5 p 1, p 2 ^integer p 1 NIL мусор p 1^ 10 c 2 integer p 2 NIL p 2^ c 2 10 c 1 : =5 new(p 1) p 1^: =c 1 p 2: =p 1 c 2 : =10 p 2^: =c 2 new(p 2) p 2^: =p 1^ p 1: =NIL dispose(p 2) p 2: =NIL Память, указатели, адресная арифметика
Указатели в языке C int c 1 5 int *p 1, *p 2 p 1 NULL мусор *p 1 10 int c 2 p 2 NULL *p 2 c 2 10 c 1 =5 p 1=new int *p 1=c 1 p 2=p 1 c 2 =10 *p 2=c 2 P 2=new int *p 2=*p 1 p 1=NULL delete p 2 p 2=NULL p 1=&c 1 int *pd; pd = malloc(sizeof(int)); if (pd !=NULL) {*pd = 5; . . . free(pd); } Память, указатели, адресная арифметика
Вывод работа с указателем включает 4 этапа определение переменной - указателя назначение указателя на указуемую переменную или выделение памяти работа с указуемой переменной с использованием косвенного обращения по указателю. освобождение памяти Память, указатели, адресная арифметика
Операции над указателями Присваивание. Допускается присваивать указателю только значение того же типа. Var p 1, p 2: ^integer; p 3: ^real; {допустимые операции} p 1: =p 2; p: =p 3; p 1: =nil; . . . {недопустимые операции} p 3: =p 2; p 1: =p 3; Доступ к данным по указателю (операция разыменования). . j: =pi^; pi^: = pi^+2; Операции отношения: проверка равенства (=) и неравенства (< >). sign : = p 1 = p 2; if p 1<>nil then. . . Память, указатели, адресная арифметика
Адресная арифметика (Си) n *p Значение указуемой переменной; n p+i Указатель на i-ю переменную после указуемой; n p-i Указатель на i-ю переменную перед указуемой n *(p+i) Значение i-й переменной после указуемой; n p++ Установить указатель не переменную, следующую за указуемой; n p-- Установить указатель на переменную, предшествующую указуемой; n p+=i Переместить указатель на i переменных вперед относительно указуемой; n p-=i Переместить указатель на i переменных назад относительно указуемой; n *p++ Получить значение указуемой переменной и установить указатель на следующую; n *(--p) Переместить указатель к переменной, предшествующей указуемой, и получить ее значение. Память, указатели, адресная арифметика
Адресная арифметика n *p n p+i 14 15 *(p-i) n p-i … i элементов n *(p+i) 18 19 *(p-1) n p++ p 20 *p *(p+1) n p-- 21 22 n p+=i i элементов … n p-=i 24 *(p+i) 25 n *p++ A=*(p++) A=21 n *(--p) A=*(p--) A=20 Память, указатели, адресная арифметика
6. 3 Динамические структуры данных Структуры данных Последовательности Деревья Сети Вектор Бинарные Матрица Строка Сортированные Запись бинарные Очередь Стек Дек Динамические линейные структуры 1. Очередь –добавление – в конец, а удаление – из начала. 2. Стек –добавление и удаление с одной стороны. 3. Дек –добавление и удаление с двух сторон. Память, указатели, адресная арифметика
Списки Список – способ организации данных, предполагающий использование указателей для определения следующего элемента. Элемент списка состоит из двух частей: информационной и адресной. Информационная часть содержит поля данных. Адресная – включает от одного до n указателей, содержащих адреса следующих элементов. Количество связей, между соседними элементами списка определяет его связность: односвязные, двусвязные, n-связные. Списки Линейные Кольцевые Древовидные N-связные Память, указатели, адресная арифметика
Виды списков Линейный односвязный Кольцевой односвязный # Линейный двусвязный Кольцевой двусвязный # Сетевой n-связный Память, указатели, адресная арифметика

