From: Robert A Duff on 10 Apr 2007 17:42
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
> 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.