Информатика на пять О нас
 Добавить в избранное
5byte.ru
 Теория
 8 класс
 9 класс
 10 класс
 11 класс
Задания
 8 класс
 9 класс
 10 класс
 11 класс
Книги
Тесты
ЕГЭ
Turbo Pascal 7
 Описание
 Задачи
HTML
Рефераты

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

Использование указателей совместно с процедурами New и Dispose позволяет осуществлять динамическое распределение памяти.

Процедура New(P), где Р - указатель, позволяет выделить область памяти такого размера, в котором можно разместить величину базового типа. Указатель принимает значение адреса выделенной области.

Процедура Dispose (Р), где Р - указатель, позволяет освободить область памяти, на которую указывает указатель Р, для последующего использования. После выполнения процедуры значение указателя Р становится неопределнным.

Пример. Ввести в память машины 500 вещественных чисел, а затем вывести их в обратном порядке.

program EXAMPLE14;  
type  
   Mas = array[l..500] of Real;  
   Point = ^Mas;  
var  
   P: Point; {указатель}
   i: Word;  
begin  
   New(P); {выделение области для 500 чисел}
   WriteLn('Введите 500 чисел ');  
   for i := 1 to 500 do  
      Read(P^[i]);  
   for i := 500 downto 1 do  
      WriteLn(P^[il);  
   Dispose(P) {освобождение области}
end.  

Существует и другая возможность работать с динамической памятью - использовать процедуры GetMem и FreeMem.

Процедура GetMem(P,Size), где Р - переменная типа-указатель (в том числе и типа Pointer), a Size - выделяемая область памяти в байтах, позволяет выделить в динамической памяти область необходимого размера, при этом адрес выделенной области присваивается переменной Р.

Процедура FreeMem(P,Size) - здесь параметры те же, что и в процедуре] GetMem, - освобождает занятую область памяти с адресом, задаваемым переменной Р и размером Size байтов. Эта область становится свободной для повторного использования, а указатель Р становится неопределенным.

Наконец, для управления динамической памятью существует еще две процедуры: Mark и Release.

Процедура Маrk(Р), где Р - переменная типа Pointer, фиксирует текущее состояние динамической памяти, записывая в переменную Р значение указателя свободной области динамической памяти.

Процедура Release (Р), где Р - переменная типа Pointer, позволяет вернуться к состоянию динамической памяти, определяемому переменной Р, которой было присвоено значение процедурой Mark. При этом динамическая память, занятая после выполнения процедуры Mark с адресами больше адреса, зафиксированного в указателе Р, освобождается.

Во избежание ситуаций, приводящих к неправильной работе с динамической памятью, нежелательно использовать процедуру Release попеременно с процедурами Dispose и FreeMem.





 У Вас есть материал пишите нам
 
    Copyright © 2008    
  Top.Mail.Ru