Энциклопедия Turbo Pascal. Главы 1-4
Страница 32. Функции Mark и Release


Функции 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 для освобождения памяти,  если это больше под-
ходит для ваших задач.

 
« Предыдущая статья