TURBO PASCAL

Новости           

Программы

Turbo Pascal

Игры

Документация

"Странности"

FAQ

Ссылки

Гостевая книга

Благодарности

От автора

 

 

 

Процедуры и функции для работы с динамической памятью

1) Функция ADDR(X) - результат типа POINTER, содержащий адрес аргумента X.

Х- любой объект программы (имя переменной, процедуры, функции,). Аналогичный результат дает операция @Х.

2) Функция CSEG - возвращает значение, хранящееся в сегментном регистре кода программы CS. Результат: тип Word.

3) DSEG- возвращаег значение, хранящееся в сегментном регистре данных программы DS. Результат: тип Word.

4) Функция MAXAVAIL - возвращает размер в байтах наибольшего непрерывного участка кучи. Результат : тип Longint.

5) Функция MEMAVAIL - возвращает размер в байтах общего свободного пространства кучи. Результат : тип Longint.

6) Процедура NEW(P), где Р- типизированный указатель.

Резервирует фрагмент кучи для размещения переменной. За одно обращение к этой переменной можно зарезервировать не более 65521 байт динамической I Если нет свободной памяти , то возникает ошибка периода исполнения Этой процедурой можно пользоваться как функцией: Туре

рр = integer; Var

р:рр;

Begin

р :=New(pp); {Указателю р присваивается адрес свободного } {фрагмента динамической памяти}

end;

Параметром функции NEW является тип переменной указатель. Функция OFS(X) - возвращает значение типа WORD - смещение адреса указанного объекта X (X — выражение любого типа или имя процедуры). Функция SEG(X) - возвращает значение типа WORD, содержащее сегмент адреса указанного объекта X (Х- выражение любого типа или имя процедуры). Функция PTR(SEG, OFS) возвращает значение типа POINTER по заданному сегменту SEG и смещению OFS. Это значение совместимо с указателями любого типа. Параметры OFS и SEG - это выражения типа WORD. 10) Функция SIZEOF(X) - возвращает длину в байтах внутреннего представления указанного объекта. Х- имя переменной, функции или типа.tmp210-3.jpg

В данном примере .

• Процедура New(P) выделяет динамическую память под число вещественного типа Real, адрес этой памяти помещается в переменную Р (четырехбайтный указатель).

• В переменную А помещается сегментная часть адреса, по которому располагается 4-байтный указатель Р.

• В переменную В помещается сегментная часть адреса, по которому располагается число 3.14.

11) Процедура GETMEM(P, SIZE) - рассмотрена выше. Если нет памяти требуемого размера, то возникает ошибка периода исполнения. Если память не фрагментирована, то последовательное обращение к этой процедуре будет

резервировать последовательные участки памяти: начало следующего участка

будет располагаться сразу за концом предыдущего. ! 2) Процедура FREEMEM(P. SIZE) - рассмотрена выше. 11ри повторном

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

13) Процедура М ARK(P) - запоминает текущее значение указателя кучи HEAPPTR и присваивает это значение указателю Р. Здесь Р- указатель любого типа.

14) Процедура RELEASE(P) - освобождает участок кучи начиная от адреса, хранящегося в Р и до конца кучи. Одновременно уничтожается список всех свободных фрагментов, которые, возможно, были созданы процедурами DISPOSE и FREEMEM, начиная от адреса, хранящегося в Р и до конца кучи. Здесь Р -указатель любого типа.

 

 

На первую страницу

 

Rambler's Top100 PROext: Top 1000 Rambler's Top100
(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz