Ada_Ru форум

Обсуждение языка Ада

storage pool

Оставить новое сообщение

Сообщения

Eugene Kurbatov
storage pool
2005-04-14 13:07:10
HELO 

Задал этот вопрос на http://qnxclub.net, но видимо тамошний форум дохлый или 
вопрос не заинтересовал.
 
 По специфике решаемой задачи, мне надо строить дерево, причём по узлам, то 
есть динамически, гонять по нему итерации и затем удалять. Удобно будет 
применять для этого Storage_Pool. Но вот незадача, удаление этого дерева, 
даже если его элементы будут связанным списком --- весьма затратное дело. 
Есть ли в стандартной библиотеке Ады возможность реинициализировать весь пул 
одним махом?
Maxim Reznik
Re: [ada_ru] storage pool
2005-04-17 15:15:34
On Thu, Apr 14, 2005 at 05:07:10PM +0400, Eugene Kurbatov wrote:
>  По специфике решаемой задачи, мне надо строить дерево, причём по узлам, то 
> есть динамически, гонять по нему итерации и затем удалять. Удобно будет 
> применять для этого Storage_Pool. Но вот незадача, удаление этого дерева, 
> даже если его элементы будут связанным списком --- весьма затратное дело. 
> Есть ли в стандартной библиотеке Ады возможность реинициализировать весь пул 
> одним махом?
>

Как раз для этого в Аде и сделан гибкий механизм Storage_Pool-ов.

Как пример можно посмотреть в GNAT System.Pool_Size.
Этот пул использыется компилятором автоматически,
когда для access type указан
аттрибут 'Storage_Size. Пул создается в стеке и операция
освобоздения стреляет один раз, когда описание access type
выходит из области видимости. Типа такого

procedure Xxx is

   procedure Process_Tree is
      type Node_Access is access all Node;
      for Node_Access'Storage_Size use 1_000_000;

      -- автоматически создается компилятором:
      -- Pool : System.Pool_Size.Stack_Bounded_Pool;
      -- for Node_Access'Storage_Pool use Pool;

      Root : Node_Access := Create_Tree;
   begin
      Walk_Tree (Root);
   end;

begin
   Process_Tree;  -- После выхода из Process_Tree пул сбрасывается
end;

В любом случае можно написать свой Storage_Pool с желаемой
логикой освобождения памяти.

-- 
Maxim Reznik
Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти