|
|
| Новости |
ФУНКЦИИ Mark и Release
Альтернативой использованию функции Dispose является приме-
нение функций Mark и Release, которые совместно обеспечивают ос-
вобождение динамического участка памяти после его использования в
программе. В действительности вызов функции Mark должен делаться
до обращения к функции New, а вызов функции Release должен де-
латься после функции New, когда требуется перераспределить па-
мять. Функция Release освобождает все участки памяти, которые вы-
делялись между вызовами функций Mark и Release. Таким способом
системе возвращается несколько участков памяти, а при использова-
нии функции Dispose возвращается только один участок памяти, за-
даваемый соответствующим указателем.
В функции Mark используется один аргумент. Он должен являть-
ся указателем переменной любого типа, поскольку единственным наз-
начением этой функции является сохранением начала области памяти
в динамической области. Функция Release должна использовать тот
же указатель, который не должен модифицироваться. Например, в
приведенной ниже программе выполняется динамическое выделение па-
мяти под массив из сорока целых чисел и освобождение ее при помо-
щи функций Mark и Release:
{Динамическое выделение памяти с использованием Mark и Release.}
program alloc;
type
pntr = ^RecType;
RecType = array[1..40] of integer;
var
p: pntr;
t: integer;
q: ^integer;
begin
Mark(q);
New(p);
for t: = 1 to 40 do p^[t]:=t*2;
for t:= 1 to 40 do Write(p^[t], ' ');
WriteLn;
Release(q);
{В этом месте вся память уже возвращена системе}
end.
Метод управления динамическим распределением памяти зависит
от того, как вы хотите возвращать память системе. Если память бу-
дет возвращаться частично, то следует использовать функцию
Dispose. Если вы всегда предполагаете освобождать всю память, то
лучше использовать функции Mark и Release. В примерах в этой кни-
ге используется функция Dispose, поскольку такой метод обладает
большей гибкостью. Однако вы можете свободно пользоваться функци-
ями Mark и Release для освобождения памяти, если это больше под-
ходит для ваших задач.
|
|
(с)Все права защищеныПо всем интересующим вопросампрошу писать на электронный адрес
|