Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Процедуры работы с кучей

Типизированные (переменные) указатели

Дерево Absolute

Pointer

Работа с динамической памятью

Оперативная память компьютера представляет собой совокупность элементарных ячеек для хранения информации – байтов, каждый из которых имеет номер. Эти номера – адреса позволяют, обращается к любому байту.

Гибкое средство управление динамической памятью – указатель.

Указатель – Это переменная, которая в качестве своего значения содержит адрес байта памяти. Адрес задается двумя шестнадцатиразрядными словами (в двоичной СС).

Адрес = Сегмент: Смещение

Сегмент – это участок памяти, имеющий длину 64кб и начинающийся с адреса, кратного 16.

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

СА = сегмент*16+Сегмент (Стандартный адрес)

Сегмент = СА div 16

Смещение = СA mod 16

Виды памяти:

1) Куча(heap)

2) Стек

3) Сегмент данных

4) Рабочий код модуля

5) Служебная информация

Options/compile/memorysize

{$M…}

{$M, стек, тип Heap, max Heap}

По умолчанию: {$M. 16384.0.655360}

Стек: 0..65520

Min Heap: 0..655360

Max heap^ 0..655360

Var p:pointer;

Sizeof(pointer) = 4 байта

Pointer = Сегмент:Смещение (word:word)

P:=nil (Нулевой адрес)

Операции с pointer:

1) P:=q;

2) P<>Q или p=q

3) Нельзя read И write

4) P^ - операция разыменования. Позволяет обратиться к значению по адресу P. (x:=p^)

5) P:=@x - Берется адрес переменной x

6) Addr(x):pointer. @x=addr(x)

7) Function seg(x):word (возвращает сегмент)

8) Function ofs(x):word (Возвращает смещение)

9) Function ptr(s,o:word):pointer (Возвращает адрес по заданному смещению и сегменту)

 

Var memory:word absolute $1004:$0000;

St:string[30];

Stlen:byte absolute st;

A:integer;

B: array [1..10] of byte absolute a;

{absolute позволяет разместить переменную по заданному адресу}

Begin

Memory:=16;

St:=’123456789a’

Stlen:=5;

Writeln(st); {выведет ‘12345’, ибо мы ограничили переменной stlen=5 размер который выделится для стринга}

End;

 

Ссылочный тип= ^базовый тип

Type mass=array[1..100] of byte;

Var

pInt:^integer;

pbyte:^byte;

pmass:^mass

begin

pint^:=5;

pbyte^:10;

pmass^[pint^]:=pbyte^;

1) New(p) – резервирует в динамической памяти свободный участок для размещения динамической переменной. В параметр Р превращается указатель на данный участок памяти. (new работает с типизированными указателями)

2) Getmem(p:pointer; size:word) – резервирует участок размера size в байтах

3) Dispose(p:pointer) - освобождает участок памяти на который указывает Р

4) Freemam (P:pointer; size:word) – освобождает память по адресу P объемом size

5) Procedure mark(p:pointer); - запоминает текущее значение указателя, но память под указатель не резервируется

6) Procedure relean (p:pointer); - Позволяет освободить кучу от указателя Р (запомненного с помощью mark(p)) и до конца.

7) Function maxavail:longint – возвращает размер в байтах максимального свободного участка памяти

8) Function memavail:longint – Возвращает суммарный объем всех свободных участков куч.

Var x:^Boolean;

Y:Boolean;

Begin

New(x);

X^:=true;

Y:=not x^;

Dispose(x);

Rwiteln(y);

End;

<== предыдущая лекция | следующая лекция ==>
Бинарные файлы. Assignfile(f,’text.txt’); | Деревья
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 244; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.