Ada_Ru форум

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

storage pool

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

Сообщения

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

 

HELO

 

Задал этот вопрос на http://qnxclub.net, но видимо тамошний форум дохлый или вопрос не заинтересовал.

По специфике решаемой задачи, мне надо строить дерево, причём по узлам, то есть динамически, гонять по нему итерации и затем удалять. Удобно будет применять для этого Storage_Pool. Но вот незадача, удаление этого дерева, даже если его элементы будут связанным списком --- весьма затратное дело. Есть ли в стандартной библиотеке Ады возможность реинициализировать весь пул одним махом?

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

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