TURBO PASCAL |
Новости
|
Процедуры и функции для работы с динамической памятью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) - возвращает длину в байтах внутреннего представления указанного объекта. Х- имя переменной, функции или типа. В данном примере . • Процедура New(P) выделяет динамическую память под число вещественного типа Real, адрес этой памяти помещается в переменную Р (четырехбайтный указатель). • В переменную А помещается сегментная часть адреса, по которому располагается 4-байтный указатель Р. • В переменную В помещается сегментная часть адреса, по которому располагается число 3.14. 11) Процедура GETMEM(P, SIZE) - рассмотрена выше. Если нет памяти требуемого размера, то возникает ошибка периода исполнения. Если память не фрагментирована, то последовательное обращение к этой процедуре будет резервировать последовательные участки памяти: начало следующего участка будет располагаться сразу за концом предыдущего. ! 2) Процедура FREEMEM(P. SIZE) - рассмотрена выше. 11ри повторном использовании этой процедуры к уже освобожденному участку памяти возникает ошибка периода исполнения. 13) Процедура М ARK(P) - запоминает текущее значение указателя кучи HEAPPTR и присваивает это значение указателю Р. Здесь Р- указатель любого типа. 14) Процедура RELEASE(P) - освобождает участок кучи начиная от адреса, хранящегося в Р и до конца кучи. Одновременно уничтожается список всех свободных фрагментов, которые, возможно, были созданы процедурами DISPOSE и FREEMEM, начиная от адреса, хранящегося в Р и до конца кучи. Здесь Р -указатель любого типа.
|
На первую страницу
(с)Все права защищеныПо всем интересующим вопросам прошу писать на электронный адрес |