Энциклопедия Turbo Pascal. Главы 1-4 Страница 32. Функции Mark и Release
|
Страница 32 из 60
Функции 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 для освобождения памяти, если это больше под- ходит для ваших задач.
|