Prev: accuracy
Next: Ada Hash
From: Robert A Duff on
Stefan Bellon <sbellon(a)sbellon.de> writes:

> Martin Krischik wrote:
>
>> First we need to know which platform you are using (compiler/OS).
>
> GNAT on GNU/Linux, Windows and Solaris, where the memory allocation
> should work well on all three of them (but using separates or package
> Naming in a project file to supply different algorithms for the
> allocation strategy is no problem).

You can probably use storage pool code that is entirely portable to
these three systems. If you need to use OS-specific things like mmap
and VirtualAlloc, you can isolate those parts, but in your case, it's
probably not necessary.

>> Then: how a storrage pool get's it memory is up to the pool designer.
>
>> In your case you could allocate a large chuck of memory strait from
>> the OS and then sub-allocate it using an algorithm optimised for your
>> needs.
>
> When using storage pools, can the storage pools be dynamically resized,
> or is a storage pool, once created, fixed in its size?

User-defined storage pools are entirely programmable. You write the
code. You make it do whatever you like. If you want
dynamically-resizable pools, then write the Allocate procedure
to dynamically resize when needed.

>... The latter would
> rule out using storage pools since we do not know in advance how many
> data we need to store, just the "Item_Type" is known when instantiating
> the data structure, so it's size is known (provided we can trust the
> 'Size, 'Object_Size, and 'Component_Size attributes).

You need to look up the 'Max_Size_In_Storage_Elements attribute,
which is more relevant to storage pools. If your types are not
unconstrained arrays or discriminated records, then the "Max_" size
is probably the only size.

- Bob
First  |  Prev  | 
Pages: 1 2 3 4 5 6
Prev: accuracy
Next: Ada Hash